1. 程式人生 > >RPC使用rabbitmq實現

RPC使用rabbitmq實現

bsp 本地服務 font clear 自動 配置 tran contain 學習

兩天時間重寫公司架構在本地實現測試學習

雙向連接客戶端和服務端配置:

  1. 連接rabbitmq服務器
  2. 定義消息隊列
  3. 配置發送請求的模板:交換機、消息隊列。
  4. 配置監聽處理:監聽的隊列、消息轉換處理
  5. 配置處理類:處理類、發布的接口。

RPC,全稱為Remote Procedure Call,即遠程過程調用,它是一個計算機通信協議。
它允許像調用本地服務一樣調用遠程服務。它可以有不同的實現方式。如RMI(遠程方法調用)、Hessian、Http invoker等。
另外,RPC是與語言無關的。
RPC實現
1.通信模型:假設通信的為A機器與B機器,A與B之間有通信模型,在Java中一般基於BIO或NIO;。
2.過程(服務)定位:使用給定的通信方式,與確定IP與端口及方法名稱確定具體的過程或方法;
3.遠程代理對象:本地調用的方法(服務)其實是遠程方法的本地代理,因此可能需要一個遠程代理對象,對於Java而言,遠程代理對象可以使用Java的動態對象實現,封裝了調用遠程方法調用;
4.序列化,將對象名稱、方法名稱、參數等對象信息進行網絡傳輸需要轉換成二進制傳輸,這裏可能需要不同的序列化技術方案。如:protobuf,Arvo等。
Java實現RPC框架
1、實現技術方案
使用比較原始的方案實現RPC框架,采用Socket通信、動態代理與反射與Java原生的序列化。
2、RPC框架架構
RPC架構分為三部分:
1)服務提供者,運行在服務器端,提供服務接口定義與服務實現類。
2)服務中心,運行在服務器端,負責將本地服務發布成遠程服務,管理遠程服務,提供給服務消費者使用。
3)服務消費者,運行在客戶端,通過遠程代理對象調用遠程服務。
rabbitmq實現重要點說明
連接點配置
<rabbit:connection-factory id="rabbitConnectionFactory"
host="127.0.0.1" username="guest" password="guest" port="5672" />
<!-- 服務發布 -->
<bean id="請調用我" class="com.batman.ClientFactoryBean">
<property name="queueName" value="queue.batman" />
<property name="serviceInterface"
value="com.batman.service.api.Service" />
客戶端發送請求模板配置
<rabbit:template id="amqpTemplate" connection-factory="rabbitConnectionFactory"
queue="queue.batman" exchange="exchange" reply-timeout="60000" />
<!-- 配置監聽容器,指定消息處理類,處理方法,還可以配置自動確認等-->
<rabbit:listener-container requeue-rejected="false"
concurrency="1" message-converter="messageConverter">
<rabbit:listener queues="queue.batman"
ref="resolver" method="clearinstance" />
</rabbit:listener-container>
定義消息隊列
<!-- 定義消息隊列 -->
<rabbit:queue queue-arguments="amqpQueueArguments" id="transQueue"
name="queue.batman" />
處理監聽的處理類
<rabbit:listener-container requeue-rejected="false"
<rabbit:listener queues="transQueue" ref="MessageService" />
</rabbit:listener-container>
實際的處理類,並調用服務端發布的接口
<bean id="nonFinanicalService" class="com.batman.Service">
<property name="service" ref="messageServiceImpl" />
<property name="serviceInterface"
value="com.batman.service.api.Service" />
</bean>
<bean id="messageServiceImpl" class="com.batman.aipsweb.service.impl.MessageServiceImpl"> </bean>

最後在客戶端實現類上面Resource具體的發布名稱

RPC使用rabbitmq實現