前言:
学会此框架后让我对微服务的理解更加深刻
本篇主要将的是dubbo+zookeeper+springboot的整合并测试,需看完我的前两篇博客《dubbo理论》和《zookeeper》才能看懂本篇文章
环境配置
zookeeper环境(注册中心)
dubbo-admin:github下载,是一个监控后台,轮询的方式查看注册了那些服务,那些服务被消费了
dubbo (jar包,也可以导入maven依赖)
注意:在启用分布式架构项目时,应先开启zkserver(zookeeper服务)-->dubbo-admin(服务监控可视化)-》最后再运行springboot项目
dubbo-admin安装
可以不安装,因为它仅仅是一个监控服务的可视化
1.下载dubbo-admin
地址 :https://github.com/apache/dubbo-admin/tree/master
2、解压进入目录
修改 dubbo-adminsrcmain esources application.properties 指定zookeeper地址
server.port=7001
spring.velocity.cache=false
spring.velocity.charset=UTF-8
spring.velocity.layout-url=/templates/default.vm
spring.messages.fallback-to-system-locale=false
spring.messages.basename=i18n/message
spring.root.password=root
spring.guest.password=guest
dubbo.registry.address=zookeeper://127.0.0.1:2181
3.在项目目录下打包dubbo-admin,cmd指令(用管理员权限)
也可以用maven或idea打成jar包
mvn clean package -Dmaven.test.skip=true
4.找到指定目录下的dubbo-admin.jar(用cmd指令运行)
java -jar dubbo-admin.jar
注意:再运行dubbo-admin前需开启zookeeper服务,
zookeeper开启成功界面
dubbo-admin开启成功界面
执行完毕,我们去访问一下 http://localhost:7001/ , 这时候我们需要输入登录账户和密码,我们都是默认的root-root;
证明dubbo-admin安装成功
框架搭建
新建两个springboot项目模块,用来模仿服务提供者,和服务消费者,项目进导入web即可
1.提供者搭建配置
导入相关依赖
<!-- Dubbo Spring Boot Starter --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.3</version> </dependency> <!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient --> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency> <!-- 引入zookeeper --> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>2.12.0</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>2.12.0</version> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.14</version> <!--排除这个slf4j-log4j12--> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency>
在properties中配置dubbo信息
server.port=8001
#当前应用名字
dubbo.application.name=provider-server
#注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
#扫描指定包下服务
dubbo.scan.base-packages=com.king.service
注意:我是在一台服务器上跑两个项目所以我由额外配置了tomcat的端口号
建一个service接口和实现类
package com.king.service; public interface TicketService { public String getTicket(); }
package com.king.service; import org.apache.dubbo.config.annotation.Service; import org.springframework.stereotype.Component; //zookeeper服务的注册与发现 @Service //被扫描到,在项目启动中就自动注册到注册中心,将服务发布出去,注解注解来源:apache, @Component //放到spring容器中 public class TicketServiceImpl implements TicketService{ @Override public String getTicket() { return "《分布式系统之路》"; } }
注意:注解@Service调的是dubbo的,作用:让dubbo框架扫描的
到这里简单的服务提供者就完成了,下面运行主启动类,测试
注意:在启动项目时,先以开启zkserver-->dubbo-admin-->springboot项目的顺序一次打开,否则报错!!!
通过dubbo-admin的7001端口就可以查看是否注册成功
2.服务消费者搭建
导入相关依赖。跟提供者一样的依赖
<!--dubbo--> <!-- Dubbo Spring Boot Starter --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.3</version> </dependency> <!--zookeeper--> <!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient --> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency> <!-- 引入zookeeper --> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>2.12.0</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>2.12.0</version> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.14</version> <!--排除这个slf4j-log4j12--> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency> </dependencies>
在application.properties配置消费者信息
server.port=8082 #当前应用名字 dubbo.application.name=consumer-server #注册中心地址 dubbo.registry.address=zookeeper://127.0.0.1:2181
新建server类
注意:正常企业级开发,服务的发现过程是通过导报指定的服务接口获得,让后通过pom引入,此处为了方便就直接引用了,引用方式看代码
import org.apache.dubbo.config.annotation.Reference; import org.springframework.stereotype.Service; @Service public class UserService { //我们需要去拿注册中心的服务 //需求:现在我们的用户想使用买票的服务,这要怎么弄呢 ? @Reference //仅需定义相同路径和名字相同的接口就能使用 ,企业用pom坐标 TicketService ticketService; public void buyTicket(){ String ticket = ticketService.getTicket(); System.out.println("在注册中心拿到=》"+ticket); } }
这个作用就是接收引用信息的接口
package com.king.service; public interface TicketService { public String getTicket(); }
单元测,并运行
import com.king.service.UserService; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest class ConsumerServerApplicationTests { @Autowired UserService userService; @Test void contextLoads() { userService.buyTicket(); } }
总结