文章目录
提供者与消费者
Eureka注册中心
服务消费者该如何获取服务提供者的地址信息?
- 服务提供者启动时向eureka注册自己的信息 eureka保存这些信息 消费者根据服务名称向eureka拉取提供者信息
如果有多个服务提供者,消费者该如何选择?(多个User-Service)
- 服务消费者利用负载均衡算法,从服务列表中挑选一个
消费者如何得知服务提供者的健康状态?
- 服务提供者会每隔30秒向EurekaServer发送心跳请求,报告健康状态 eureka会更新记录服务列表信息,心跳不正常会被剔除 消费者就可以拉取到最新的信息
搭建EurekaServer
- 引入依赖,除了主要的@EnableEurekaServer外,@SpringBootApplication等注解也存在这个依赖里。
<dependencies><!--Eureka服务端依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency></dependencies>
- 修改启动类,添加注解
packagecn.itcast.eureka;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@SpringBootApplication@EnableEurekaServerpublicclassEurekaApplication{publicstaticvoidmain(String[] args){SpringApplication.run(EurekaApplication.class,args);}}
- 修改配置文件,注册到Eureka;以及服务名称
server:port:10086spring:application:name: eurekaserver # 服务名称eureka:client:service-url:#将自己也注册到Eureka服务上,为了将来Eureka集群之间通信;例如有多个Eureka服务时,这些Eureka会互相做注册,为了数据交流,这里配的是Eureka集群的地址defaultZone: http://127.0.0.1:10086/eureka/
- 启动,在浏览器中测试
服务注册
将user-service和order-service服务都按照以下方式注册到Eureka上
- 添加Eureka客户端依赖
<!--Eureka客户端依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>
- 修改application.yml 2.1 添加Eureka配置信息,将服务注册到Eureka
eureka:client:service-url:defaultZone: http://127.0.0.1:10086/eureka/ # 新增注册到eureka
2.2 增加服务名
spring:application:name: userservice # 新增服务名
- 启动,可以看到服务都被注册上了
- 在idea如何启动多个,例如这里再启动一个userservice服务 修改Name,点击Modify options,选择add VM options 输入-Dserver.port=8082,该服务将会启动在8082端口 启动userservice2 可以看到userservice有2个服务被注册
服务发现
- 将“主机+端口”改为服务名,通过服务名可直接调用该服务,不再需要ip和端口
publicOrderqueryOrderById(Long orderId){// 1.查询订单Order order = orderMapper.findById(orderId);// 2.定义url// String url = "http://localhost:8081/user/"+order.getUserId();String url ="http://userservice/user/"+order.getUserId();//修改为服务名// 3.发送http请求User user = restTemplate.getForObject(url,User.class);// 4.封装user
order.setUser(user);// 5.返回return order;}
- 给RestTemplate添加@LoadBalanced注解,表示负载均衡
必须添加该注解,否则会产生异常java.net.UnknownHostException: userservice;当只有一个userservice服务时,也会产生该异常
@SpringBootConfigurationpublicclassWebConfiguration{@LoadBalanced//负载均衡@Bean//相当于@Controller,@Service等publicRestTemplaterestTemplate(){returnnewRestTemplate();}}
- 启动所有服务,在浏览器中输入4次http://localhost:8080/order/104,调用4次userservice服务时,发现UserApplication:8081和UserApplication2:8082分别被调用了2次,实现了负载均衡
项目结构
版权归原作者 康提扭狗兔 所有, 如有侵权,请联系我们删除。