SpringBoot+dubbo+zookeeper搭建微服务分布式结构
项目架构的演进
三层构–>分布式架构 -->服务架构(SOA)–>微服务分布式架构(简称:微服)
什么是分布式?
通俗就是把一个东西拆解成多个模块,我们这里把程序进行拆分模块,把每个模块部署到不同的服务器上进行工作,让他们远程相互调用,形成依赖,降低程序的耦合度,提高程序的内部性能为目的一种解决方式
常见的微服务分布式架构解决方案:
- 借助Dubbo+Zookeeper(基于rpc协议的调用)
- SpringCloud(基于Http协议实现的服务)
准备工作:
- 具备zookeeper服务器环境(默认端口:2181)
Dubbo工作原理
这里由于是在同一台计算机部署多模块,所以需要建一个父类SpringBoot 工程
在父类工程里创建多模块应用
-
创建父类SpringBoot工程
扫描二维码关注公众号,回复: 11561785 查看本文章修改pom的打包方式为pom
-
创建服务的提供者模块(SpringBoot工程)导入dubbo依赖
编写接口业务,以及实现方法
<!--添加dubbo相关依赖--> <dependency> <groupId>com.alibaba.spring.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.0.0</version> <!-- 排除依赖 --> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> </exclusion> <exclusion> <groupId>org.jboss.netty</groupId> <artifactId>netty</artifactId> </exclusion> </exclusions> </dependency> <!--zookeeper--> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.6</version> </dependency> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency>
在springBoot配置文件中添加dubbo配置
server.port=9001 #服务器的端口号 #springboot集成dubbo的配置 #发布的服务名称 名称可改 spring.dubbo.application.id=dubbo_provider spring.dubbo.application.name=dubbo_provider #连接注册中心 spring.dubbo.registry.address=zookeeper://127.0.0.1:2181 #表示服务提供者 spring.dubbo.server=true #指定用dubbo协议 不能改 spring.dubbo.protocol.name=dubbo #指定服务提供者的端口 可以改 spring.dubbo.protocol.port=20880
使用注解在service实现类中暴露服务Service注解都是Alibaba包下的
//使用注解@Service暴露服务(发布服务) @Service(interfaceClass =TestService.class,timeout = 2000) @Component //创建本地bean public class TestServiceImpl implements TestService { @Override public String getHelloWord() { return "helloword"; } }
使用注解在springBoot启动类上开启Dubbo服务
@SpringBootApplication @EnableDubboConfiguration //开启dubbo public class DubboProviderApplication { public static void main(String[] args) { SpringApplication.run(DubboProviderApplication.class, args); } }
-
创建服务的提消费者模块(SpringBoot工程)导入dubbo依赖(Web工程)
导入dubbo依赖与上面的提供者依赖的一样
在springBoot配置文件中添加dubbo配置
#server.port 消费者的服务端口 server.port=9002 #springboot整合dubbbo spring.dubbo.application.name=dubbo-consumer spring.dubbo.application.id=dubbo-consumer spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
在SpringBoot启动类上开启dubbo
@SpringBootApplication @EnableDubboConfiguration public class DubboConsumerApplication { public static void main(String[] args) { SpringApplication.run(DubboConsumerApplication.class, args); } }
编写控制器调用远程调用方法
使用注解@Reference注解引用远程服务
@Reference的属性
-
interfaceClass 调用远程服务的接口
-
check属性 :(默认设置true)启动工程时检查服务是否存在,必须存在才能启动工程,false启动工程,放弃检查服务是否存在。
@RestController public class TestController { //使用@Reference注解引用远程服务 //将服务提供者接口,复制一份到消费者工程,而且接口所在的包的限定名要一致 @Reference(interfaceClass = TestService.class,check = false) private TestService testService; @RequestMapping("/getData") public String getData(){ //调用dubbo的远程服务 String result=this.testService.getHelloWord(); return result; } }
注意:这里需要将提供者的接口,复制一份到消费者工程,接口所在的包必须要相同
-
测试远程访问调用消费者模块的业务方法
浏览器地址栏输入:localhost::消费者服务端口/请求名