當前位置:首頁 > IT技術(shù) > 編程語言 > 正文

【SpringBoot與分布式 04】
2021-10-22 16:56:48

一、分布式主要的思想:常用Dubbo/Zookeeper、而SpringBoot推薦使用全棧的Spring,SpringBoot+SpringCloud

隨著互聯(lián)網(wǎng)應用的增加,業(yè)務會越來越多,如果修改一個模塊就會整個應用重新部署,比如:

?RPC遠程調(diào)用服務

為了解決這個問題:可以用到zookeeper+Dubbo? 或者SpringBoot+SpringCloud來解決

1、先已zookeeper+Dubbo來解決

zookeeper先把訂單模塊注冊進入,然后user模塊去zk里面就找對應的訂單,這樣就解決了上面的問題

-----dubbo原理圖-----

?Containerdobbo的服務容器,在啟動時Provider(服務提供者)將服務信息注冊到zk(1.register),服務消費者通過消息的訂閱(2.subscribe)zk的消息,然后zk把消息推送(3.notify)給consumer,

服務如果有變更,zk也會通過長連接的方式推送給comsumer,這就意味著comsumer實時掌握著一份服務信息。如果消費者要調(diào)用,就會通過手持的這些服務者名單中通過負載均衡機制(4.invoke)

找到對應的服務,如果調(diào)用失敗可以在地址列表中繼續(xù)調(diào)用,知道調(diào)用成功,dubbo還有監(jiān)控機制(5.count)調(diào)用的次數(shù),時間都會給監(jiān)控中心發(fā)送

#案例

1、docker先拉取zookeeper鏡像

 docker pull zookeeper:latest

2、運行zookeeper

docker run --name zk01 -p 2181:2181 --restart always -d ab3f783cf9c4

ab3f783cf9c4是imageID

3、創(chuàng)建一個服務project工程,包含兩個module,創(chuàng)建服務提供者和消費者

ticket(服務提供者)和user(消費者)之間的關(guān)系:ticket把信息注冊到zk,user訂閱zk的消息,user調(diào)用ticket的消息也是通過dubbo來完成的

4、整個dubbo -->在provider的pom文件中引入

        <!--整合dubbo-->
        <dependency>
            <groupId>com.alibaba.spring.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>

        <!--整合zookeeper的客戶端工具-->
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>

5、配置provider的application.properties屬性

dubbo.application.name=provider-ticket
#zk地址
dubbo.registry.address=zookeeper://172.16.203.130:2181
#掃描service下的服務發(fā)布出去
dubbo.scan.base-packagess=com.wufq.providerticket.service

6、如何發(fā)布服務-->在對應的service包下需要發(fā)布的服務類加上

@Component  //加入到spring容器中
@Service //將服務發(fā)布出去
public class TicketServiceImpl implements TicketService {
    @Override
    public String getTicket() {
        return "《長津湖》";
    }
}

7、啟動provider的服務

8、消費者測試-consumer的步驟

 1)引入依賴 --和provider引入的依賴一樣

 2)配置dubbo的注冊中心地址 --和provider的application.properties配置的一樣

dubbo.application.name=consumer-user
#zk地址
dubbo.registry.address=zookeeper://172.16.203.130:2181

?? 3)引用服務

?consumer中把provider的service包拷貝進入? ---》注意com.wufq的包,consumer和provider必須是一樣的

測試消費者是否消費了服務者提供的服務

?

本文摘自 :https://www.cnblogs.com/

開通會員,享受整站包年服務立即開通 >