目录
1.搭建环境
2.搭建步骤
3.效果展示
4.注意项
1.搭建环境如下图所示:
2.搭建步骤
2.1 目标概述
一共三个服务,一个公共接口服务,一个提供者服务,一个消费者服务。最终以浏览器或者postman查询接口,实现订单信息回显。最终项目结构如图所示:
2.2 搭建项目
首先搭建根项目,pom文件详细信息如下代码块所示:
<modelVersion>4.0.0</modelVersion> <groupId>org.sh.ds</groupId> <artifactId>ds</artifactId> <version>0.0.1-SNAPSHOT</version> <name>ds</name> <description>ds</description> <properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>2.6.13</spring-boot.version> </properties> <packaging>pom</packaging><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>com.alibaba.boot</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>0.2.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><scope>provided</scope></dependency> </dependencies><modules><module>ds_interface</module><module>ds_provider</module><module>ds_consumer</module> </modules>
接下来搭建公共接口服务,它是一个被引用的jar,无需启动类,整体结构如图所示:
pom文件详细信息如下代码块所示:
<parent><groupId>org.sh.ds</groupId><artifactId>ds</artifactId><version>0.0.1-SNAPSHOT</version> </parent><modelVersion>4.0.0</modelVersion> <groupId>org.sh.ds-interface</groupId> <artifactId>ds_interface</artifactId> <version>0.0.1-SNAPSHOT</version> <name>ds_interface</name> <description>ds_interface</description> <properties><java.version>1.8</java.version> </properties><packaging>pom</packaging>
接下来搭建提供者服务, 它是一个服务,需要启动类,整体结构图如下:
pom文件详细信息如下代码块所示:
<parent><groupId>org.sh.ds</groupId><artifactId>ds</artifactId><version>0.0.1-SNAPSHOT</version> </parent> <dependencies><dependency><groupId>org.sh.ds-interface</groupId><artifactId>ds_interface</artifactId><version>0.0.1-SNAPSHOT</version></dependency> </dependencies><modelVersion>4.0.0</modelVersion> <groupId>org.sh.provider</groupId> <artifactId>ds_provider</artifactId> <version>0.0.1-SNAPSHOT</version> <name>ds_provider</name> <description>ds_provider</description> <properties><java.version>1.8</java.version> </properties> <packaging>jar</packaging>
yml文件如下图所示:
对应的启动类需要加注解@EnableDubbo,启动Dubbo自动配置,如下图所示:
提供者服务会提供订单的基本信息,具体代码如下所示:
import com.alibaba.dubbo.config.annotation.Service; import org.sh.ds.ds_interface.bean.ConsumerInfo; import org.sh.ds.ds_interface.service.ConsumerService; import org.springframework.stereotype.Component;@Service @Component public class ConServiceImpl implements ConsumerService {@Overridepublic ConsumerInfo getConInfo(String orderNum) {return new ConsumerInfo("张三", "12345678901");} }
其中,@service 必须引用dubbo注解, 暴漏服务,使Spring Bean作为Dubbo服务接口的实现类,自动将服务注册到配置的注册中心。如此,提供者服务就已经搭建完毕。
接下来搭建消费者服务,消费者服务提供接口,和提供者服务有些不同,整体结构图如下:
pom文件详细信息如下代码块所示:
<parent><groupId>org.sh.ds</groupId><artifactId>ds</artifactId><version>0.0.1-SNAPSHOT</version> </parent><modelVersion>4.0.0</modelVersion> <groupId>org.sh.consumer</groupId> <artifactId>ds_consumer</artifactId> <version>0.0.1-SNAPSHOT</version> <name>ds_consumer</name> <description>ds_consumer</description> <properties><java.version>1.8</java.version> </properties> <packaging>jar</packaging> <dependencies><dependency><groupId>org.sh.ds-interface</groupId><artifactId>ds_interface</artifactId><version>0.0.1-SNAPSHOT</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies>
yml文件如下图所示:
server:port: 8081servlet:context-path: /apidubbo:application:name: dubbo-consumerregistry:address: 127.0.0.1:2181protocol: zookeepermonitor:protocol: registry
消费者接口具体实现如下所示:
@Reference private ConsumerService consumerService;@Override public Map<String,String> getOrderInfo(String orderNum) {Map<String,String> orderInfo = new HashMap<>();//基本信息ConsumerInfo consumerInfo = consumerService.getConInfo(orderNum);orderInfo.put("staffName",consumerInfo.getStaffName());orderInfo.put("staffPhone",consumerInfo.getStaffPhone());//订单信息orderInfo.put("orderNum",orderNum);return orderInfo; }
其中@Reference即消费者通过该注解注入服务提供者的接口代理对象,实现远程调用。
2.3 服务启动
首先通过maven编译,打包确保无报错,然后依次启动zookeeper、提供者服务、消费者服务。
zookeeper启动如下图所示:
具体怎么部署zookeeper可自行查询,需要注意的主要问题是和dubbo的版本兼容。
提供者服务启动如下图所示:
消费者服务启动如下图所示:
3. 效果展示
通过postman请求结果如下图所示:
通过浏览器请求结果如下图所示:
4. 注意项
在搭建中发现最容易出问题的是版本兼容,所以必须搭配好版本。以免出现各种启动报错问题。例如启动zookeeper报错,启动微服务报错等。如下所示:
1.zookeeper报错:java.lang.NoClassDefFoundError: org/apache/zookeeper/Watcher
2. Close of session 0x0
java.io.IOException: Len error. A message from /192.168.31.190:52951 with advertised length of -625229312 is either a malformed message or too large to process (length is greater than jute.maxbuffer=1048575)
zookeeper还可以配置web端可视化工具,有两种方式,其一:ZooInspector,这个可自行下载, 直接运行jar包即可。如下图所示:
其二:使用zkui工具,自行下载后,需要在idea中使用maven编译,生成jar包,如下图所示
同级目录,需要复制一份config.cfg文件,打开该文件可设置登录用户和密码,如图所示:
最后可在浏览器打开web端页面,如图所示:
最后,整个项目就搭建完毕,需要思考的是从入门到具体应用,再到分布式组件的内部原理,还需要在工作中去实践总结经验。