目录
2.3.1 解压后将config 目录下的 zoo_sample.cfg 复制改名为 zoo.cfg
3.2 在开发dubbo前先部署运行 dubbo-admin 的原因
3.4.3 拷贝dubbo-admin-2.5.10.war到 tomcat下 webapps 目录里面
4.3.3 application.properties配置文件
5.4 dubbo-consumer服务的swagger页面下,测试dubbo流程
一、开发环境
下面列举我用到的环境和软件工具
- win8
- jdk8
- idea 版本:ULTIMATE 2020.1
- tomcat 9.0.41
- zookeeper 3.6.2
- dubbo-admin 2.5x
- dubbo2.5.3 + springboot2
二、zookeeper 注册中心
2.1 简介
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
2.2 下载
2.2.1 选择版本
https://downloads.apache.org/zookeeper/
2.2.2 zookeeper-3.6.2 下载地址
https://downloads.apache.org/zookeeper/zookeeper-3.6.2/
2.3 解压部署
2.3.1 解压后将config 目录下的 zoo_sample.cfg 复制改名为 zoo.cfg
备注:
- zoo.cfg配置文件可以配置zookeeper的端口,默认端口为:2181
- 如果需要修改端口,可以修改zoo.cfg配置文件的
initLimit=10 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit=5 # the directory where the snapshot is stored. # do not use /tmp for storage, /tmp here is just # example sakes. dataDir=/tmp/zookeeper # the port at which the clients will connect clientPort=2181 # the maximum number of client connections. # increase this if you need to handle more clients #maxClientCnxns=60
2.4 启动zookeeper
windows 下面 双击 bin目录下的 zkServer.cmd
备注:
注:本文旨在介绍dubbo入门案例,zookeeper 这里只是最简单的单机使用,够下面dubbo入门案例的使用。
三、dubbo-admin的部署运行
3.1 简介
简单来说,dubbo-admin 就是dubbo的管理控制台,通过可视化工具来方便我们管理每一个服务和每一个节点,可以查看管理提供者、消费者、注册的服务信息等等。
3.2 在开发dubbo前先部署运行 dubbo-admin 的原因
dubbo-admin 能够帮助我们直观的发现dubbo提供者和消费者是否注册成功、注册的服务是否一致等等,在我调试找错过程中帮了非常大的忙,所以呢,在这里我就先部署运行dubbo-admin。
3.3 下载、打包使用
3.3.1 下载地址:
https://github.com/apache/dubbo/tree/2.5.x
备注:dubbo-admin还有其他版本,暂时没有尝试过,有兴趣的伙伴可以尝试一下其他版本
3.3.2 下载后的目录结构:
3.3.3 dubbo-admin打成war包
核心打包命令:mvn package -Dmaven.test.skip=true
Administrator@AYFHCB5YL8GNT7P MINGW64 /d/dubbo/dubbo-admin/dubbo-2.5.x
$ ls
CODE_OF_CONDUCT.md dubbo-demo/ dubbo-test/
codestyle/ dubbo-filter/ LICENSE
CONTRIBUTING.md dubbo-maven/ mvnw*
DISCLAIMER dubbo-monitor/ mvnw.cmd
dubbo/ dubbo-parent.iml NOTICE
dubbo-admin/ dubbo-plugin/ pom.xml
dubbo-cluster/ dubbo-registry/ PULL_REQUEST_TEMPLATE.md
dubbo-common/ dubbo-remoting/ README.md
dubbo-config/ dubbo-rpc/
dubbo-container/ dubbo-simple/
Administrator@AYFHCB5YL8GNT7P MINGW64 /d/dubbo/dubbo-admin/dubbo-2.5.x
$ cd dubbo-admin/
Administrator@AYFHCB5YL8GNT7P MINGW64 /d/dubbo/dubbo-admin/dubbo-2.5.x/ dubbo-admin
$ ls
dubbo-admin.iml pom.xml src/
Administrator@AYFHCB5YL8GNT7P MINGW64 /d/dubbo/dubbo-admin/dubbo-2.5.x/ dubbo-admin
$ mvn package -Dmaven.test.skip=true
[WARNING]
[WARNING] Some problems were encountered while building the effective settings
[WARNING] Unrecognised tag: 'distributionManagement' (position: START_TAG seen . ..</servers>\r\n<distributionManagement>... @41:25) @ C:\Users\Administrator\.m 2\settings.xml, line 41, column 25
[WARNING]
[INFO] Scanning for projects...
[WARNING]
[WARNING] Some problems were encountered while building the effective model for com.alibaba:dubbo-admin:war:2.5.10
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-comp iler-plugin is missing. @ com.alibaba:dubbo-parent:2.5.10, D:\▒▒▒▒2020\dubbo\dub bo-admin\dubbo-2.5.x\pom.xml, line 510, column 21
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-sure fire-plugin is missing. @ com.alibaba:dubbo-parent:2.5.10, D:\▒▒▒▒2020\dubbo\dub bo-admin\dubbo-2.5.x\pom.xml, line 433, column 21
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-jar- plugin is missing. @ com.alibaba:dubbo-parent:2.5.10, D:\▒▒▒▒2020\dubbo\dubbo-ad min\dubbo-2.5.x\pom.xml, line 414, column 21
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-sour ce-plugin is missing. @ com.alibaba:dubbo-parent:2.5.10, D:\▒▒▒▒2020\dubbo\dubbo -admin\dubbo-2.5.x\pom.xml, line 520, column 21
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-depl oy-plugin is missing. @ com.alibaba:dubbo-parent:2.5.10, D:\▒▒▒▒2020\dubbo\dubbo -admin\dubbo-2.5.x\pom.xml, line 503, column 21
[WARNING]
[WARNING] It is highly recommended to fix these problems because they threaten t he stability of your build.
[WARNING]
[WARNING] For this reason, future Maven versions might no longer support buildin g such malformed projects.
[WARNING]
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building dubbo-admin 2.5.10
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ dubbo-admi n ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ dubbo-admin ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 130 source files to D:\▒▒▒▒2020\dubbo\dubbo-admin\dubbo-2.5.x\d ubbo-admin\target\classes
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ du bbo-admin ---
[INFO] Not copying test resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ dubbo-a dmin ---
[INFO] Not compiling test sources
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ dubbo-admin ---
[INFO] Tests are skipped.
[INFO]
[INFO] --- maven-war-plugin:2.2:war (default-war) @ dubbo-admin ---
[INFO] Packaging webapp
[INFO] Assembling webapp [dubbo-admin] in [D:\▒▒▒▒2020\dubbo\dubbo-admin\dubbo-2 .5.x\dubbo-admin\target\dubbo-admin-2.5.10]
[INFO] Processing war project
[INFO] Copying webapp resources [D:\▒▒▒▒2020\dubbo\dubbo-admin\dubbo-2.5.x\dubbo -admin\src\main\webapp]
[INFO] Webapp assembled in [1874 msecs]
[INFO] Building war: D:\▒▒▒▒2020\dubbo\dubbo-admin\dubbo-2.5.x\dubbo-admin\target\dubbo-admin-2.5.10.war
[INFO] WEB-INF\web.xml already added, skipping
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 10.174 s
[INFO] Finished at: 2020-12-24T10:07:52+08:00
[INFO] Final Memory: 10M/25M
[INFO] ------------------------------------------------------------------------
Administrator@AYFHCB5YL8GNT7P MINGW64 /d/dubbo/dubbo-admin/dubbo-2.5.x/dubbo-admin
$
Administrator@AYFHCB5YL8GNT7P MINGW64 /d/dubbo/dubbo-admin/dubbo-2.5.x/dubbo-admin
$ ls
dubbo-admin.iml pom.xml src/ target/
Administrator@AYFHCB5YL8GNT7P MINGW64 /d/dubbo/dubbo-admin/dubbo-2.5.x/dubbo-admin
$ cd target/
Administrator@AYFHCB5YL8GNT7P MINGW64 /d/dubbo/dubbo-admin/dubbo-2.5.x/dubbo-admin/target
$ ls
classes/ dubbo-admin-2.5.10/ dubbo-admin-2.5.10.war generated-sources/ maven-archiver/ maven-status/
Administrator@AYFHCB5YL8GNT7P MINGW64 /d/dubbo/dubbo-admin/dubbo-2.5.x/dubbo-admin/target
3.4 利用tomcat容器部署
3.4.1 tomcat下载地址
https://tomcat.apache.org/download-90.cgi
3.4.2 修改tomcat默认的8080端口
修改tomcat安装目录下的conf文件夹下的server.xml文件
<!-- A "Connector" represents an endpoint by which requests are received
and responses are returned. Documentation at :
Java HTTP Connector: /docs/config/http.html
Java AJP Connector: /docs/config/ajp.html
APR (HTTP/AJP) Connector: /docs/apr.html
Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
-->
<Connector port="8089" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<!-- A "Connector" using the shared thread pool-->
<!--
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
3.4.3 拷贝dubbo-admin-2.5.10.war到 tomcat下 webapps 目录里面
3.4.4 dubbo-admin登录账号说明
备注一: 有2个账号 账号root的密码是root , 账号guest的密码是guest , 不要误以为只有1个账号 root/guest
备注二:如果需要编辑登录账号,可以修改在dubbo-admin-2.5.10.war下的\WEB-INF\dubbo.properties文件
默认的dubbo.properties配置文件
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.admin.root.password=root
dubbo.admin.guest.password=guest
3.4.5 启动tomcat
备注:如果已经运行,先关闭
3.4.6 查看tomcat启动日志
3.4.7 启动成功后,登录dubbo-admin后台
登录地址为:http://127.0.0.1:8089/dubbo-admin-2.5.10/
四、springboot2搭建dubbo
4.1 github代码地址
https://github.com/leijihui/springboot2DubboDemo
4.2 公共api服务 dubbo-api模块
4.2.1 dubbo-api模块包结构
4.2.2 UserDTO 实体
package com.lazy.dubbo.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.io.Serializable;
@Data
@AllArgsConstructor
public class UserDTO implements Serializable {
private static final long serialVersionUID = 1L;
public int id;
public String name;
public String sex;
}
4.2.2 UserService 服务
package com.lazy.dubbo.service;
import com.lazy.dubbo.dto.UserDTO;
public interface UserService {
UserDTO getUser(Integer id);
}
4.3 生产者服务 dubbo-provider模块
4.3.1 dubbo-provider模块包结构
4.3.2 UserServiceImpl实现类
package com.lazy.dubbo.provider.service;
import com.alibaba.dubbo.config.annotation.Service;
import com.lazy.dubbo.dto.UserDTO;
import com.lazy.dubbo.service.UserService;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
@Service(version = "1.0.0")
@Slf4j
public class UserServiceImpl implements UserService {
static ArrayList<UserDTO> userList = new ArrayList<>();
static {
userList.add(new UserDTO(1, "张三", "男"));
userList.add(new UserDTO(2, "李四", "男"));
userList.add(new UserDTO(3, "王五", "女"));
userList.add(new UserDTO(4, "赵六", "女"));
}
@Override
public UserDTO getUser(Integer id) {
for (UserDTO user : userList) {
if (id == user.getId()) {
log.info(user.toString());
return user;
}
}
return null;
}
}
4.3.3 application.properties配置文件
#应用名
spring.dubbo.application.name=provider
#注册中心地址
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
#协议端口
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20880
#扫描包
spring.dubbo.scan=com.lazy.dubbo.provider.service
4.4 消费者服务 dubbo-consumer模块
4.4.1 dubbo-consumer模块包结构
4.4.2 UserController 测试控制器
package com.lazy.dubbo.consumer.controller;
import com.alibaba.dubbo.config.annotation.Reference;
import com.lazy.dubbo.dto.UserDTO;
import com.lazy.dubbo.service.UserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(value = "/user")
@Slf4j
@Api(value = "/user", tags = "dubbo测试")
public class UserController {
@Reference(version = "1.0.0")
private UserService userService;
@GetMapping(value = "/query")
@ApiOperation(value = "dubbo服务RPC查询用户信息", notes = "dubbo服务RPC查询用户信息", response = String.class)
public String getUser(@RequestParam(value = "id", defaultValue = "1", required = true) int id) {
UserDTO user = userService.getUser(id);
if (user != null) {
log.info(user.toString());
return user.toString();
}
log.info("user is not exist!");
return "user is not exist!";
}
}
4.4.3 application.properties配置文件
server.port=8082
#dubbo相关配置都放到 dubbo-consumer.xml 中, 原因是dubbo配置写在这里的话,dubbo的@refrence注解会和spring的注解产生冲突
#如果需要更深入需要了解spring启动加载配置的顺序
4.4.4 dubbo-consumer.xml 配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
<dubbo:application name="consumer"/>
<dubbo:registry address="zookeeper://127.0.0.1:2181" />
<!-- 需要使用到提供者服务的包路径,多个包时用逗号隔开。注: 网上好多这里写错了 -->
<dubbo:annotation package="com.lazy.dubbo.consumer.controller"/>
</beans>
五、启动dubbo测试
5.1 启动生产者dubbo-provider模块
2020-12-24 16:56:20.379 INFO 16444 --- [ main] org.apache.zookeeper.ZooKeeper : Initiating client connection, connectString=127.0.0.1:2181 sessionTimeout=30000 watcher=org.I0Itec.zkclient.ZkClient@faea5f
2020-12-24 16:56:20.398 INFO 16444 --- [127.0.0.1:2181)] org.apache.zookeeper.ClientCnxn : Opening socket connection to server 127.0.0.1/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error)
2020-12-24 16:56:20.399 INFO 16444 --- [127.0.0.1:2181)] org.apache.zookeeper.ClientCnxn : Socket connection established to 127.0.0.1/127.0.0.1:2181, initiating session
2020-12-24 16:56:20.436 INFO 16444 --- [127.0.0.1:2181)] org.apache.zookeeper.ClientCnxn : Session establishment complete on server 127.0.0.1/127.0.0.1:2181, sessionid = 0x10018d10871001d, negotiated timeout = 30000
2020-12-24 16:56:20.710 INFO 16444 --- [ main] c.l.dubbo.provider.ProviderApplication : Started ProviderApplication in 2.063 seconds (JVM running for 3.362)
5.2 启动消费者dubbo-consumer模块
2020-12-24 17:04:14.467 INFO 33228 --- [ main] org.apache.zookeeper.ZooKeeper : Client environment:java.io.tmpdir=C:\Users\Administrator\AppData\Local\Temp\
2020-12-24 17:04:14.467 INFO 33228 --- [ main] org.apache.zookeeper.ZooKeeper : Client environment:java.compiler=<NA>
2020-12-24 17:04:14.467 INFO 33228 --- [ main] org.apache.zookeeper.ZooKeeper : Client environment:os.name=Windows 10
2020-12-24 17:04:14.467 INFO 33228 --- [ main] org.apache.zookeeper.ZooKeeper : Client environment:os.arch=x86
2020-12-24 17:04:14.467 INFO 33228 --- [ main] org.apache.zookeeper.ZooKeeper : Client environment:os.version=10.0
2020-12-24 17:04:14.467 INFO 33228 --- [ main] org.apache.zookeeper.ZooKeeper : Client environment:user.name=Administrator
2020-12-24 17:04:14.467 INFO 33228 --- [ main] org.apache.zookeeper.ZooKeeper : Client environment:user.home=C:\Users\Administrator
2020-12-24 17:04:14.467 INFO 33228 --- [ main] org.apache.zookeeper.ZooKeeper : Client environment:user.dir=D:\dubbo\springboot2DubboDemo
2020-12-24 17:04:14.469 INFO 33228 --- [ main] org.apache.zookeeper.ZooKeeper : Initiating client connection, connectString=127.0.0.1:2181 sessionTimeout=30000 watcher=org.I0Itec.zkclient.ZkClient@12d1782
2020-12-24 17:04:14.505 INFO 33228 --- [127.0.0.1:2181)] org.apache.zookeeper.ClientCnxn : Opening socket connection to server 127.0.0.1/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error)
2020-12-24 17:04:14.507 INFO 33228 --- [127.0.0.1:2181)] org.apache.zookeeper.ClientCnxn : Socket connection established to 127.0.0.1/127.0.0.1:2181, initiating session
2020-12-24 17:04:14.613 INFO 33228 --- [127.0.0.1:2181)] org.apache.zookeeper.ClientCnxn : Session establishment complete on server 127.0.0.1/127.0.0.1:2181, sessionid = 0x10018d10871001e, negotiated timeout = 30000
2020-12-24 17:04:15.642 INFO 33228 --- [ main] pertySourcedRequestMappingHandlerMapping : Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity<springfox.documentation.spring.web.json.Json> springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)]
2020-12-24 17:04:15.821 INFO 33228 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
2020-12-24 17:04:16.068 INFO 33228 --- [ main] d.s.w.p.DocumentationPluginsBootstrapper : Context refreshed
2020-12-24 17:04:16.094 INFO 33228 --- [ main] d.s.w.p.DocumentationPluginsBootstrapper : Found 1 custom documentation plugin(s)
2020-12-24 17:04:16.137 INFO 33228 --- [ main] s.d.s.w.s.ApiListingReferenceScanner : Scanning for api listing references
2020-12-24 17:04:16.284 INFO 33228 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8082 (http) with context path ''
2020-12-24 17:04:16.287 INFO 33228 --- [ main] c.l.dubbo.consumer.ConsumerApplication : Started ConsumerApplication in 4.91 seconds (JVM running for 6.212)
2020-12-24 17:04:24.929 INFO 33228 --- [nio-8082-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2020-12-24 17:04:24.929 INFO 33228 --- [nio-8082-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2020-12-24 17:04:24.937 INFO 33228 --- [nio-8082-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 8 ms
5.3 dubbo-admin管理后台查看服务
5.3.1 服务提供者服务查看
5.3.2 服务消费者服务查看
5.4 dubbo-consumer服务的swagger页面下,测试dubbo流程
5.4.1 swagger地址
http://localhost:8082/doc.html
5.4.1 swagger测试dubbo流程
- 生产者dubbo-provider模块日志
2020-12-24 17:09:34.872 INFO 11784 --- [:20880-thread-2] c.l.d.provider.service.UserServiceImpl : UserDTO(id=2, name=李四, sex=男)
- 消费者dubbo-consumer模块日志
2020-12-24 17:04:24.929 INFO 33228 --- [nio-8082-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' 2020-12-24 17:04:24.929 INFO 33228 --- [nio-8082-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' 2020-12-24 17:04:24.937 INFO 33228 --- [nio-8082-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 8 ms 2020-12-24 17:04:25.046 INFO 33228 --- [nio-8082-exec-1] c.l.d.c.controller.UserController : UserDTO(id=2, name=李四, sex=男)