
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 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条)