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

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息