91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

在微服務中如何規范化使用RabbitMQ

發布時間:2021-12-24 09:24:31 來源:億速云 閱讀:123 作者:小新 欄目:云計算

這篇文章主要為大家展示了“在微服務中如何規范化使用RabbitMQ”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“在微服務中如何規范化使用RabbitMQ”這篇文章吧。

 

典型應用場景

在微服務中如何規范化使用RabbitMQ  
RabbitMQ典型應用場景

此圖展示了RabbitMQ的典型應用場景,生產者把消息發送到Exchange,消費者從Queue讀取消息,消息可通過topic、header、direct、fanout四種方式由Exchange路由到Queue。

在微服務中的開發過程中,如果任由開發者定義Exchange、Queue以及路由方式,即便優秀的程序員正確定義了這些要素,服務依賴會生成一個巨復雜的網狀結構,管理起來必定是災難。所以要對使用進行規范,這是技術管理應有之意。

通過文檔定義規范,這種約束是弱勢的,需要不斷核查規范的實施情況。通過代碼、架構定義規范,在不需要開發者介入的情況下執行規范,屏蔽程序的復雜性,是架構師需要考慮的問題。優秀的架構使開發過程簡單化、規范化,使程序員專注業務開發,提升業務開發的效率。

按照這種指導思想,對RabbitMQ的使用進行了規范和約束。

 

微服務應用規范化

在微服務中如何規范化使用RabbitMQ  
微服務中的應用場景

約束如下:

  1. 如若服務啟用了Producer,則創建與服務名相同的Exchange,發送消息到此Exchange。

  2. 如若服務啟用了Consumer,則創建與服務名相同的Queue,從此Queue中訂閱消息。

  3. 讀取程序中定義的Receiver,解析定義的service(其實就是Exchange名字)和tag,創建Queue到Exchange的綁定關系。

  4. 以上過程,在服務啟動時執行,無需程序員干預。

優點: 程序員無需關注消息發給誰,只需要調用服務發送消息即可;程序員無需關注消息如何路由,只需要為自己關心的tag,定義receiver處理類。另外,因為采用統一的api發送和接收,為未來的擴展提供了便利。

缺點: 每個服務只有一個Exchange,只有一個Queue,并且只使用了Topic路由;所以,性能并不是最優的,只能在中度或輕度處理場景中使用。如若有個性化的處理場景,還是需要自定義這些組件的。

綜述: 在AntSentry的微服務體系中,大流量量使用了Kinesis隊列(類kafka),大并發使用了點對點的SQS隊列,RabbitMQ只是用來解決服務之間的調用問題,流量并不會太大,其靈活性彌補了Kinesis和SQS的不足,在這個特有的場景中,滿足了業務需求。在大多數的微服務場景中,這種應用模式是可以滿足大多數的需求的,希望對你有所幫助。

 

使用方法

1)修改pom,升級api版本(此項目并未開源,公司內部使用)

<dependency>
    <groupId>xx</groupId>
    <artifactId>cloud-api-tools</artifactId>
    <version>1.3.3-SNAPSHOT</version>
</dependency>
 

2)采用自定義AutoConfig,配置后即按照規范啟用了rabbitmq

com:
  xx:
    rabbitmq:
      host: 10.30.60.41
      password: XX
      userName: xx
      port: 5672
      vhost: dev
 

3)創建消息實體

@Data
public class XXDemoInfo extends MQMessage {
 
    @Override
    public String getTag() {
        return "work";  // 消息的標識
    }
 
    private String name;
    private Long timestamp;
}
 

4)創建接受者,配置消息的來源以及tag;可配置多個注解,實現一個receiver處理多種tag

@RabbitMQReceiver(service = "cloud-xx-service", tag = "work") 
public class XXTagReceiver implements RabbitMQBaseReceiver<XXDemoInfo> {
 
    @Override
    public void receive(XXDemoInfo xxDemoInfo) {
 
    }
}
 

5)發送消息示例

@Autowired
RabbitMQSender sender;
 
 
public void send() {
    XXDemoInfo info = new XXDemoInfo();
    info.setName("Test Message");
    info.setTimestamp(System.currentTimeMillis());
    sender.send(info);
}
 
  1. 配置ReceiverScan
@RabbitMQReceiverScan(basePackages = {"com.xx.receiver"})
// 填寫receiver類所在的包
public class SomeApplication implements CommandLineRunner{

}
   

實現關鍵技術

這里感覺沒什么好講的,總不能貼出來大片的代碼吧!就把啟動過程簡單畫一下吧。

在微服務中如何規范化使用RabbitMQ  


以上是“在微服務中如何規范化使用RabbitMQ”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新津县| 宁乡县| 葫芦岛市| 平阳县| 苏尼特左旗| 永德县| 广东省| 铁岭县| 安国市| 高要市| 建昌县| 东莞市| 额敏县| 项城市| 疏勒县| 肃宁县| 闽侯县| 青州市| 遂溪县| 犍为县| 元阳县| 哈密市| 青铜峡市| 阿拉尔市| 呼图壁县| 西盟| 昌黎县| 灵武市| 神木县| 成武县| 咸宁市| 卓资县| 新竹市| 汤阴县| 翁牛特旗| 聂拉木县| 弋阳县| 察隅县| 高雄县| 睢宁县| 广昌县|