一、分布式主要的思想:常用Dubbo/Zookeeper、而SpringBoot推薦使用全棧的Spring,SpringBoot+SpringCloud
隨著互聯(lián)網(wǎng)應(yīng)用的增加,業(yè)務(wù)會(huì)越來越多,如果修改一個(gè)模塊就會(huì)整個(gè)應(yīng)用重新部署,比如:
?RPC遠(yuǎn)程調(diào)用服務(wù)
為了解決這個(gè)問題:可以用到zookeeper+Dubbo? 或者SpringBoot+SpringCloud來解決
1、先已zookeeper+Dubbo來解決
zookeeper先把訂單模塊注冊進(jìn)入,然后user模塊去zk里面就找對(duì)應(yīng)的訂單,這樣就解決了上面的問題
-----dubbo原理圖-----
?Containerdobbo的服務(wù)容器,在啟動(dòng)時(shí)Provider(服務(wù)提供者)將服務(wù)信息注冊到zk(1.register),服務(wù)消費(fèi)者通過消息的訂閱(2.subscribe)zk的消息,然后zk把消息推送(3.notify)給consumer,
服務(wù)如果有變更,zk也會(huì)通過長連接的方式推送給comsumer,這就意味著comsumer實(shí)時(shí)掌握著一份服務(wù)信息。如果消費(fèi)者要調(diào)用,就會(huì)通過手持的這些服務(wù)者名單中通過負(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把信息注冊到zk,user訂閱zk的消息,user調(diào)用ticket的消息也是通過dubbo來完成的
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的客戶端工具--> <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ù)類加上
@Component //加入到spring容器中 @Service //將服務(wù)發(fā)布出去 public class TicketServiceImpl implements TicketService { @Override public String getTicket() { return "《長津湖》"; } }
7、啟動(dòng)provider的服務(wù)
8、消費(fèi)者測試-consumer的步驟
1)引入依賴 --和provider引入的依賴一樣
2)配置dubbo的注冊中心地址 --和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必須是一樣的
測試消費(fèi)者是否消費(fèi)了服務(wù)者提供的服務(wù)
?
本文摘自 :https://www.cnblogs.com/