當(dāng)前位置:首頁(yè) > IT技術(shù) > 編程語(yǔ)言 > 正文

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

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

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

?RPC遠(yuǎn)程調(diào)用服務(wù)

為了解決這個(gè)問(wèn)題:可以用到zookeeper+Dubbo? 或者SpringBoot+SpringCloud來(lái)解決

1、先已zookeeper+Dubbo來(lái)解決

zookeeper先把訂單模塊注冊(cè)進(jìn)入,然后user模塊去zk里面就找對(duì)應(yīng)的訂單,這樣就解決了上面的問(wèn)題

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

?Containerdobbo的服務(wù)容器,在啟動(dòng)時(shí)Provider(服務(wù)提供者)將服務(wù)信息注冊(cè)到zk(1.register),服務(wù)消費(fèi)者通過(guò)消息的訂閱(2.subscribe)zk的消息,然后zk把消息推送(3.notify)給consumer,

服務(wù)如果有變更,zk也會(huì)通過(guò)長(zhǎng)連接的方式推送給comsumer,這就意味著comsumer實(shí)時(shí)掌握著一份服務(wù)信息。如果消費(fèi)者要調(diào)用,就會(huì)通過(guò)手持的這些服務(wù)者名單中通過(guò)負(fù)載均衡機(jī)制(4.invoke)

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

#案例

1、docker先拉取zookeeper鏡像

 docker pull zookeeper:latest

2、運(yùn)行zookeeper

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

ab3f783cf9c4是imageID

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

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

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

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

        <!--整合zookeeper的客戶(hù)端工具-->
        <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下的服務(wù)發(fā)布出去
dubbo.scan.base-packagess=com.wufq.providerticket.service

6、如何發(fā)布服務(wù)-->在對(duì)應(yīng)的service包下需要發(fā)布的服務(wù)類(lèi)加上

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

7、啟動(dòng)provider的服務(wù)

8、消費(fèi)者測(cè)試-consumer的步驟

 1)引入依賴(lài) --和provider引入的依賴(lài)一樣

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

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

?? 3)引用服務(wù)

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

測(cè)試消費(fèi)者是否消費(fèi)了服務(wù)者提供的服務(wù)

?

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

開(kāi)通會(huì)員,享受整站包年服務(wù)立即開(kāi)通 >