SpringBoot+dubbo+zookeeper搭建微服务分布式架构
SpringBoot+dubbo+zookeeper搭建微服务分布式结构
项目架构的演进
三层构–>分布式架构 —>服务架构(SOA)–>微服务分布式架构(简称:微服)
什么是分布式?
通俗就是把一个东西拆解成多个模块,我们这里把程序进行拆分模块,把每个模块部署到不同的服务器上进行工作,让他们远程相互调用,形成依赖,降低程序的耦合度,提高程序的内部性能为目的一种解决方式
常见的微服务分布式架构解决方案:
- 借助Dubbo+Zookeeper(基于rpc协议的调用)
- SpringCloud(基于Http协议实现的服务)
准备工作:
- 具备zookeeper服务器环境(默认端口:2181)
Dubbo工作原理
这里由于是在同一台计算机部署多模块,所以需要建一个父类SpringBoot 工程
在父类工程里创建多模块应用
创建父类SpringBoot工程
修改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:消费者服务端口/请求名
还没有评论,来说两句吧...