一、分布式主要的思想:常用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/