总体实现思路是启动一个生产者项目注册, 将所含服务注册到zookeeper的注册中心, 然后在启动一个消费者项目,将所需服务向zookeeper注册中心进行订阅, 等待注册中心的通知
注册中心基于负载均衡算法给消费者匹配到合适的生产者主机,然后通知消费者可以使用
实现生产者
导入zookeeper依赖包
org.apache.dubbo dubbo-spring-boot-starter 2.7.3 com.github.sgroschupf zkclient 0.1 org.apache.curator curator-framework 2.12.0 org.apache.curator curator-recipes 2.12.0 org.apache.zookeeper zookeeper 3.4.14 org.slf4j slf4j-log4j12
配置服务名字, 注册中心地址, 扫描被注册的包
server.port=8081 #当前应用名字 dubbo.application.name=provider-server #注册中心地址 dubbo.registry.address=zookeeper://127.0.0.1:2181 #扫描指定包下服务 dubbo.scan.base-packages=com.demo.service
实现一个接口,在接口中完成需求
public interface Translate { String translate(String str); }
public interface Translate { String translate(String str); }
实现一个消费者
导入依赖, 和生产者的依赖是相同的
配置服务名字,注册中心地址
server.port=8082 # 配置zookeeper # 配置服务名字 dubbo.application.name=consumer.server # 配置注册中心地址 dubbo.registry.address=zookeeper://127.0.0.1:2181
本来正常步骤是需要将服务提供者的接口打包,然后用pom文件导入,我们这里使用简单的方式,直接将服务的接口拿过来,路径必须保证正确,即和服务提供者相同
实
现获取翻译服务
package com.demo.service; import org.apache.dubbo.config.annotation.Reference; import org.springframework.stereotype.Service; @Service //使用Spring的Service添加组件 public class Translation { @Reference //远程引用指定的服务,他会按照全类名进行匹配,看谁给注册中心注册了这个全类名 private Translate translate; public String getTranslation(String str) { return translate.translate(str); } }
实现controller
@RestController public class TranslateController { @Autowired Translation translation; @RequestMapping("/tran/{str}") public String tran(@PathVariable("str")String str) { return translation.getTranslation(str); } }
测试
首先启动zookeeper服务器和dubbo进入到监控页面中
切记不要关闭服务器和dubbo开启生产者这个springboot项目
上图显示就是生产者注册成功, 我们可以点击ip查看详情
启动消费者这个springboot项目
访问地址, 但是要注意我们消费者的tomcat启动端口已经换成8082
翻译成功
到此这篇关于SpringBoot中dubbo+zookeeper实现分布式开发的应用详解的文章就介绍到这了,更多相关SpringBoot dubbo zookeeper分布式内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!