1、在docker环境下安装zookeeper
# ##安装zookeeper # docker pull zookeeper # ##启动zookeeper # docker run --name zookeeper-01 --restart always -d -p 2181:2181 zookeeper # ##部署dubbo-admin服务监控平台 # ## 下载dubbo-admin-2.6.0.war包,并在docker环境下部署tomcat容器 # docker pull tomcat # ## 从docker hub 拉取Tomcat,并将打好的war包上传之宿主机器一个目录下如:/home/dubbo-admin-2.6.0.war # ## 启动tomcat,并用浏览器访问http://host_path:8080查看tomcat启动情况,记得将dubbo-admin配置文件中的zk ip 修改为zk容器的ip而不是宿主机器的ip(天坑) # ## 查看docker 容器ip # docker inspect 364c77111927| grep IPAddress # docker run -it --name dubbo-admin -d --rm -p 8080:8080 tomcat # ## 进入docker容器中,并查看tomcat容器路径 # docker exec -i -t <docker_name> bash # ## 将宿主机器的war包复制到docker容器中: #从主机复制到容器 sudo docker cp host_path(宿主机器路径) containerID:container_path(容器路径) # ## 从容器复制到主机 # docker cp containerID:container_path host_path # ## 例如:复制及自动部署完成之后访问dubbo-admin服务管理平台http://host_path:8080/dubbo-admin-2.6.0 # docker cp /home/dubbo-admin-2.6.0.war 603140acbd3c:/usr/local/tomcat/webapps # ## 镜像打包 否则下次启动还需重新部署 docker commit -m "message" -a "author" ${CONTAINER_ID} ${NEW_IMAGE_NAME} 复制代码
1、pom文件添加dubbo依赖
<!-- Spring Boot Dubbo 依赖 --> <dependency> <groupId>io.dubbo.springboot</groupId> <artifactId>spring-boot-starter-dubbo</artifactId> <version>${dubbo-spring-boot}</version> </dependency> 复制代码
2、application.properties 配置
## Dubbo 服务提供者配置 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.wxx.demo.dubbo 复制代码
这里 ZK 配置的地址和端口,就是上面本机搭建的 ZK 。如果有自己的 ZK 可以修改下面的配置。配置解释如下:
spring.dubbo.application.name 应用名称
spring.dubbo.registry.address 注册中心地址
spring.dubbo.protocol.name 协议名称
spring.dubbo.protocol.port 协议端口
spring.dubbo.scan dubbo 服务类包目录
3、服务提供者代码
@Component//将该服务纳入spring容器中 @Service(version = "1.0.0")//使用dubbo提供的service注解,通过version提供版本号 public class MallOrderServiceImpl implements MallOrderService { @Autowired private MallOrderMapper orderMapper; @Override public MallOrder getOrderById(String orderId) { return orderMapper.selectByPrimaryKey(orderId); } @Override public Integer saveOrder(MallOrder order) { return orderMapper.insert(order); } } 复制代码
4、MallOrder 实体要实现序列化接口
1、添加依赖同上
2、application.properties 配置
## 避免和 server 工程端口冲突 server.port=8081 ## Dubbo 服务消费者配置 spring.dubbo.application.name=consumer spring.dubbo.registry.address=zookeeper://127.0.0.1:2181 spring.dubbo.scan=com.wxx.demo.dubbo 复制代码
3、消费者代码
@Component public class DubboConsumerService { @Reference(version = "1.0.0")//@Reference(version = “1.0.0”) 通过该注解,订阅该接口版本为 1.0.0 的 Dubbo 服务。 MallOrderService mallOrderService ; public void printCity() { String orderId="TD106986521"; MallOrder order = mallOrderService .getOrderById(orderId); System.out.println(order .toString()); } } 复制代码
1、使用dubbo注解开发,一定要注意使用
spring.dubbo.scan=com.wxx.demo.dubbo//扫描服务实现的包,否则注册不到服务 复制代码
2、dubbo-admin看不到注册的服务除了网上常规的group配置外,要检查dubbo-admin启动日志是不是有连接zk超时报错提示,解决此类问题是设置zk连接超时时长,再就是dubbo-admin配置文件配置的是否是zk容器的ip而不是宿主机器的ip