SpringCloud(3)Eureka服务集群搭建以及服务发现
1.添加本地域名映射
打开host文件,路径如下:

添加以下配置,然后保存
#eureka ip127.0.0.1 eureka7001.com
127.0.0.1 eureka7002.com
2.新建第二个eureka服务模块,并修改两个eureka服务的yml配置文件
导入的依赖跟第一个eureka服务模块的相同,修改两个模块的yml配置文件,让他们的服务地址互相改为对方的地址,形成互相注册,互相守望的效果,并且修改hostname为刚才设置的本地域名。
7001端口的服务yml配置如下:
server:port: 7001eureka:#eureka服务的实例名称instance:hostname: eureka7001.comclient:#不将自己注册进eurekaregister-with-eureka: false#指示此客户端是否应从eureka服务器获取eureka注册表信息,自己就是注册中心所以关闭fetch-registry: falseservice-url:#设置与eureka服务交互的查询和注册服务的地址defaultZone: http://eureka7002.com:7002/eureka/
7002端口的服务yml配置如下:
server:port: 7002
eureka:#eureka服务的实例名称instance:hostname: eureka7002.comclient:#不将自己注册进eurekaregister-with-eureka: false#指示此客户端是否应从eureka服务器获取eureka注册表信息,自己就是注册中心所以关闭fetch-registry: falseservice-url:#设置与eureka服务交互的查询和注册服务的地址defaultZone: http://eureka7001.com:7001/eureka/
3.打开两个eureka监控页面查看
7001端口的:

7002端口的:

每个服务出现另一个服务的域名,则代表集群搭建成功
4.配置提供者集群
复制一份provider模块,把端口设置为8012,如下图所示:

修改两个提供者项目的控制器,使其显示端口,便于分辨调用的哪一个提供者的服务:

5.添加提供者和消费者客户端到集群
修改payment提供者服务和order消费者服务的yml配置,将eureka服务地址改为两个server的地址。
两个都改为:
eureka:client:service-url:defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka
然后要先开启eureka服务集群,注册中心如下所示:

6.使用消费者进行测试
首先需要注意,目前配置了提供者集群,所以需要开启restTemplate的负载均衡功能,才能自动选择一个提供者服务进行调用,开启负载均衡,需要使用@loadBalanced注解
@Configuration
public class ApplicationContextConfig {//注册restTemplate进容器@Bean@LoadBalancedpublic RestTemplate getRestTemplate(){return new RestTemplate();}
}
将restTemplate的请求地址改为注册中心中的提供者服务的名称CLOUD-PAYMENT-SERVICE

然后启动消费者模块,进行测试,第一次访问是8011端口的

第二次访问是8012端口的

7.修改提供者客户端实例名称和显示其ip地址
在两个提供者模块下的yml配置文件中,加入以下配置,另一个实例id为payment8012
eureka:instance:instance-id: payment8011#访问路径显示ipprefer-ip-address: true
配置完成后,重新启动项目,打开eureka服务中心,可以看到已经显示的是设置的实例id,同时出现了ip地址。

8.使用服务发现
首先需要在主启动类上加入@EnableDiscoveryClient注解
@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
public class CloudProviderPayment8011Application {public static void main(String[] args) {SpringApplication.run(CloudProviderPayment8011Application.class, args);}}
然后写一个控制器方法进行测试,使用discoveryClient进行操作。
@Autowired
DiscoveryClient discoveryClient;@GetMapping("/discovery")public Object discovery(){//显示所有服务List<String> services = discoveryClient.getServices();for (String service : services) {log.info(service);}//通过服务id发现服务List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");for (ServiceInstance instance : instances) {log.info("host:{},port:{},uri:{}",instance.getHost(),instance.getPort(),instance.getUri());}return this.discoveryClient;}
访问对应路径后,控制台输出:

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
