springboot+dubbo+zookeeper

1、环境准备

一、在docker环境下安装zookeeperjava

# ##安装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}
复制代码

2、项目配置

服务端配置

一、pom文件添加dubbo依赖web

<!-- Spring Boot Dubbo 依赖 -->
        <dependency>
            <groupId>io.dubbo.springboot</groupId>
            <artifactId>spring-boot-starter-dubbo</artifactId>
            <version>${dubbo-spring-boot}</version>
        </dependency>
复制代码

二、application.properties 配置spring

## 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 服务类包目录
三、服务提供者代码docker

@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);
    }
}

复制代码

四、MallOrder 实体要实现序列化接口shell

客户端配置

一、添加依赖同上
二、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
复制代码

三、消费者代码tomcat

@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());
    }
}
复制代码

总结踩过的坑

一、使用dubbo注解开发,必定要注意使用springboot

spring.dubbo.scan=com.wxx.demo.dubbo//扫描服务实现的包,不然注册不到服务
复制代码

二、dubbo-admin看不到注册的服务除了网上常规的group配置外,要检查dubbo-admin启动日志是否是有链接zk超时报错提示,解决此类问题是设置zk链接超时时长,再就是dubbo-admin配置文件配置的是不是zk容器的ip而不是宿主机器的ipbash

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息