SpringCloud-Eureka集群实践
整体思路
1:两台Eureka服务,相互注册。
2:两台服务提供方,分别注册到两台Eureka服务器。
3:两台服务消费者,分别指定两台Eureka服务器。
代码框架
代码放git共享 https://github.com/RichyLiu0/EurekaTest1。
一、Eureka服务器注册中心配置
Springboot启动项上添加 @EnableEurekaServer注解
@SpringBootApplication
@EnableEurekaServer
public class EurekaserverApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaserverApplication.class, args);
}
}
配置两份配置文件,主要是区分IP,服务名称,然后注册相互指向。配置如下
配置1
server:
port: 8861
spring:
application:
name: eurekasvr1
eureka:
instance:
hostname: eurekasvr1
client:
service-url:
# defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
defaultZone: http://eurekasvr2:8862/eureka/
配置2
server:
port: 8862
spring:
application:
name: eurekasvr2
eureka:
instance:
hostname: eurekasvr2
client:
service-url:
defaultZone: http://eurekasvr1:8861/eureka/
因为是一台服务测试,还需要添加host配置
127.0.0.1 eurekasvr1
127.0.0.1 eurekasvr2
二、服务提供方配置
创建一个hello的服务,输出自己的端口
@RestController
public class Controller1 {
@Value("${server.port}")
String port;
@RequestMapping(value = "/hello/{userName}")
public String hello(@PathVariable(value = "userName") String userName)
{
return port+":hello," +userName;
}
}
配置文件,准备两份,只是端口不同,其它都是一样的。
配置1
server:
port: 8871
spring:
application:
name: SrvProvider
eureka:
instance:
hostname: localhost
client:
service-url:
defaultZone: http://eurekasvr1:8861/eureka/,http://eurekasvr2:8862/eureka/
配置2
server:
port: 8872
spring:
application:
name: SrvProvider
eureka:
instance:
hostname: localhost
client:
service-url:
defaultZone: http://eurekasvr1:8861/eureka/,http://eurekasvr2:8862/eureka/
启动类添加 @EnableEurekaClient注解
@SpringBootApplication
@EnableEurekaClient
public class SrvproviderApplication {
public static void main(String[] args) {
SpringApplication.run(SrvproviderApplication.class, args);
}
}
三、服务消者 配置
调用方法配置,这里需要添加 @LoadBalanced注解
@RestController
@Configuration
public class Caller1 {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate()
{
return new RestTemplate();
}
@RequestMapping(value = "/hello",method = RequestMethod.GET)
public String hello()
{
RestTemplate template=getRestTemplate();
String retVal=template.getForEntity("http://SrvProvider/hello/Eureka",String.class).getBody();
return "我是消费者," +retVal;
}
}
2个配置文件
配置1
server:
port: 8881
spring:
application:
name: SrvConsumer
eureka:
instance:
hostname: localhost
client:
service-url:
defaultZone: http://eurekasvr1:8861/eureka/,http://eurekasvr2:8862/eureka/
配置2
server:
port: 8882
spring:
application:
name: SrvConsumer
eureka:
instance:
hostname: localhost
client:
service-url:
defaultZone: http://eurekasvr1:8861/eureka/,http://eurekasvr2:8862/eureka/
启动类,不需要做特别处理
public class SrvconsumerApplication {
public static void main(String[] args) {
SpringApplication.run(SrvconsumerApplication.class, args);
}
}
四、运行
以上,代码的配置都完成了,接下需要在IDEA上配置服务多开,参考IDEA服务多开 。最终项目的效果如下
按照Eureka注册中心、服务提供方、服务消费者 顺序,逐个启动服务。如下图,6个服务都启动成功了。
2个Eureka注册中心,可以看到所有连接的服务,包括自己也注册到上面了。
消费者,刷新后可以看到端口的切换,loadBlance默认采用的机制是轮循。
第一次访问
第二次访问
以上简单的集群已经做到。接下来,我们再尝试做一下故障测试。
五、固障测试
测试1:关掉Eureka注册中心2
刷新消费者,正常运行。
测试二再次关掉服务提供方2
刷新消费者,正常运行。
测试三:再次关掉Eureka注册中心1(两个提供方都关掉了)
刷新消费者,正常运行,可以猜到,消费者实际上是把Eureka所服务清单复制到本地,然后再根据地址直接去访问服务提供方的。**
ps
测试就到这里吧,大概想知道的都知道了。。我会把代码放到git上面。有兴趣的可以自己上去试试。
代码放git共享 https://github.com/RichyLiu0/EurekaTest1。
原文地址:https://blog.csdn.net/richyliu44/article/details/115009068
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。