eureka现在已经不更新,如果再继续使用,出现重大BUG就是一个棘手的事情了,当然现在已经推出了更为优秀的nacos作为注册中心,但是zookeeper也是一种备选方案嘛。上一篇文章我们讲解了eureka的使用及注意点,这篇我们接着上篇的继续,将注册中心修改为zookeeper。
二、准备工作上篇文章地址:https://blog.csdn.net/qq_43692950/article/details/121984256
既然使用zookeeper作为注册中心了,第一步肯定只要有一台zookeeper的服务作为支撑,zookeeper搭建可以参考下面一篇我的博客:
https://blog.csdn.net/qq_43692950/article/details/110648852
还是和上篇文章中讲的一样,在父pom,或者自己的boot项目中声明出SpringCloud的版本:
版本我们采用H版的SR9版本
三、服务提供者修改4.0.0 com.bxc cloud-demo0.0.1-SNAPSHOT cloud-parent pom 1.8 UTF-8 UTF-8 2.3.7.RELEASE Hoxton.SR9 0.0.1-SNAPSHOT org.springframework.boot spring-boot-starterorg.springframework.boot spring-boot-starter-testtest org.junit.vintage junit-vintage-engineorg.projectlombok lombok1.18.16 com.alibaba fastjson1.2.62 org.springframework.boot spring-boot-dependencies${spring-boot.version} pom import org.springframework.cloud spring-cloud-dependencies${spring-cloud.version} pom import org.apache.maven.plugins maven-compiler-plugin3.8.1 1.8 UTF-8 org.springframework.boot spring-boot-maven-plugin2.3.7.RELEASE com.bxc.clouddemo.CloudDemoApplication repackage repackage
在pom中引入依赖:
org.springframework.boot spring-boot-starter-weborg.springframework.cloud spring-cloud-starter-zookeeper-discoveryorg.apache.zookeeper zookeeperorg.apache.zookeeper zookeeper3.4.9 org.slf4j slf4j-apiorg.slf4j slf4j-log4j12com.bxc common0.0.1-SNAPSHOT
spring-cloud-starter-zookeeper-discovery自带的zookeeper 包版本比较高,可能和自己安装的版本不一致,我这里用的3.4.x版的,所以排除了原先自带了,添加相应版本 ,添加后会报log4冲突的错误,直接排除掉即可。common是我们上篇博客中讲到的公共的module,大家可以参考上篇博客,也可以不依赖,将controller的返回修改为自定义的即可。
修改配置文件:
server: port: 8091 spring: application: name: provider cloud: zookeeper: connect-string: 127.0.0.1:2181 discovery: instance-host: 127.0.0.1
主启动类修改:
@SpringBootApplication @EnableDiscoveryClient public class ZkProvider2Application { public static void main(String[] args) { SpringApplication.run(ZkProvider2Application.class, args); } }
启动服务提供者,查看zookeeper中的节点:
可以看出服务信息,已经存储在了zookeeper中,此时切换一个端口,再启动一个提供者,在查看zookeeper节点的信息:
provider节点下,就出现两个信息了,这里需要知道的是,provider下的节点信息是临时节点并非持久节点,服务断开链接该节点便不存在,这点和eureka有些许差别,当然这也符合zookeeper cp的理念。
最后编写提供者提供的服务接口:
@RestController public class ProviderController { @Value("${server.port}") private String port; @GetMapping("/getData") public ResponseTemplate providerData() { return ResSuccessTemplate.builder().data("come from : " + port).build(); } @GetMapping("/getTimeData") public ResponseTemplate getTimeData() throws InterruptedException { TimeUnit.SECONDS.sleep(5); return ResSuccessTemplate.builder().data("come from : " + port).build(); } }四、服务消费者修改
消费者端的pom和配置和提供者相同,可以完全拷贝过来,将端口改为8080,在消费端,我们还是采用ribbon + restTemplate 的方式进行演示,后面我们会讲解feign的具体使用。
声明 RestTemplate
@Configuration public class RestTemplateConfig { @Bean @LoadBalanced public RestTemplate getRestTemplate() { return new RestTemplate(); } }
编写测试接口
@RestController @RequestMapping("/rest/consumer") public class ConsumerController { @Autowired RestTemplate restTemplate; @GetMapping("/getData") public ResponseTemplate getData() { ResponseTemplate responseTemplate = restTemplate.getForObject("http://provider/getData", ResSuccessTemplate.class); return responseTemplate; } @GetMapping("/getTimeData") public ResponseTemplate getTimeData() { ResponseTemplate responseTemplate = restTemplate.getForObject("http://provider/getTimeData", ResSuccessTemplate.class); return responseTemplate; } }
注意,这里的服务是区分大小写的,在eureka中是不分大小写的。
接口测试,在浏览器输入:http://localhost:8080/rest/consumer/getData
已经实现和Eureka相同的效果,但也只修改了少量的配置。
喜欢的小伙伴可以关注我的个人微信公众号,获取更多学习资料!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)