SpringCloud-Netflix-注册中心和两个服务端

SpringCloud

SpringCloud不是某一个具体的技术,而是一系列框架的有序集合,是分布式系统的整体解决方案。


eg:用户-电影举例

注册中心-Eureka

  1. 项目创建时加上Eureka Service模块
  2. 若pom.xml文件出错,可以试试加上maven的版本号配置
  3. 配置application.yml
spring:
  application:
    name: cloud-eureka-registry-center
server:
  port: 8761
eureka:
  instance:
    hostname: localhost
  client:
    register-with-eureka: false #自己就是注册中心,不用注册自己
    fetch-registry: false #要不要去注册中心获取其他服务的地址
    service-url:
       defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
  1. 启动类标记@EnableEurekaServer注解

服务端(电影服务)

目的:完成一次按照id查电影票的功能。

  1. 项目创建时加上Eureka Discovery Client模块。
  2. 加逻辑模块@RestController == @Controller+@Response。
  3. application.yml配置:项目名+端口号+注册中心url+IP保护。
  4. 启动类标记@EnableDiscoveryClient:启动服务注册和发现功能。

心跳机制:服务端每隔一段时间向注册中心发送“一条信息”以此来告知注册中心“我还活着”。

application.yml

spring:
  application:
    name: cloud-provider-movie
server:
  port: 8000  
# 指定注册到哪个注册中心
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
  instance:
    prefer-ip-address: true #注册自己服务使用ip的方式

业务逻辑部分代码:MovieController.java

@ResponseBody
@GetMapping("/getMovieById/{id}")
public Movie getMovieById(@PathVariable("id")Integer id) {
	return movieService.getMovieById(id);
}

服务端(用户服务)

目的:完成一次通过地址栏按照Id查用户的功能。

  1. 项目创建时加上Eureka Discovery Client模块
  2. 启动类标记@EnableDiscoveryClient
  3. 配置application.yml文件(与电影服务模块基本相同)
  4. 其他部分和电影服务相同

业务逻辑部分代码:UserController.java

	@ResponseBody
	@GetMapping("/getUserById/{id}")
	public User getUserById(@PathVariable("id") Integer id) {
		return userService.getUserById(id);
	}

远程调用:

目的:让用户服务去调用电影服务。
通常远程调用的几个方法:

  • 采用RestTemplate
  • 采用Feign
  • RPC

远程调用–RestTemplate

  1. 配置类声明一个RestTemplate方法,用于返回一个RestTemplate对象,并标记@Bean
@LoadBalanced   //负载均衡,如果调用者填写的url是被调用者的服务名,则需要标记负载均衡注解。这句话下文会解释。
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
  1. RestTemplate对象有很多方法,其中getForObject就可以进行远程调用,其中第一个参数是url,它可以用注册中心的服务的名,此外若用占位符传参,可以拼接字符串,第二个参数为被调用方法返回类型。

eg:

Movie movie = restTemplate.getForObject("http://CLOUD-PROVIDER-MOVIE/getMovieById/"+movieId, Movie.class);
//上面参数中填写的是服务的名,因此需要在配置类中获取restTemplate的方法头上标记@LoadBalance

3.若上诉没成功,则尝试依赖一下Ribbon模块。


远程调用后续更新

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值