成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

rabbitmq的基本使用

saucxs / 3377人閱讀

摘要:事實(shí)上,消息發(fā)送者永遠(yuǎn)不會(huì)將消息直接發(fā)送到隊(duì)列中,而是將消息發(fā)送到中,再由通過一定的路由規(guī)則路由到對(duì)應(yīng)的消息隊(duì)列中。

現(xiàn)在微服務(wù)盛行, 我們通常會(huì)進(jìn)行解耦, 這時(shí)候就需要異步的消息隊(duì)列來幫助各個(gè)服務(wù)之間解耦

rabbitmq的基本概念介紹

rabbitmq的基本概念有消息producer(消息生產(chǎn)者)、exchange(交換機(jī))、queue(隊(duì)列)、consumer(消費(fèi)者)、routingKey


(圖中的P是producer, 即消息生產(chǎn)者, 中簡(jiǎn)的Server是Exchange(交換機(jī)) 和 Queue(隊(duì)列))

Queue(隊(duì)列)

queue是存放消息的隊(duì)列, 實(shí)際上就是一個(gè)存放消息數(shù)據(jù)結(jié)構(gòu)為隊(duì)列的一個(gè)容器

exchange(交換機(jī))

我們可能會(huì)簡(jiǎn)單的以為發(fā)送者會(huì)把消息發(fā)送到隊(duì)列中, 然后消費(fèi)者對(duì)隊(duì)列進(jìn)行監(jiān)聽。事實(shí)上, 消息發(fā)送者永遠(yuǎn)不會(huì)將消息直接發(fā)送到隊(duì)列中, 而是將消息發(fā)送到exhang中, 再由exchange通過一定的路由規(guī)則路由到對(duì)應(yīng)的消息隊(duì)列中。
交換機(jī)有四種類型:

Direct
Topic
Headers
Fanout

Direct Exchange:
    

routingKey

在上面介紹exchange中說到消息通過一定的路由規(guī)則路由到對(duì)應(yīng)的隊(duì)列中, routingKey就是起著這樣的一個(gè)作用,通常我們發(fā)送消息到exchane中的時(shí)候會(huì)攜帶一個(gè)routingKey, 而這個(gè)routingKey就是exchange和queue綁定的一個(gè)規(guī)則, 由此便可以將消息從exchange再發(fā)送到對(duì)應(yīng)的queue上

參考文章https://segmentfault.com/a/11...

SpringBoot中使用rabbitmq

首先添加以下依賴:

  
            org.springframework.boot
            spring-boot-starter-amqp
        

配置項(xiàng)如下:

spring:
  rabbitmq:
    port: 5672
    password: guest
    username: guest
    host: localhost
    listener:
      simple:
        acknowledge-mode: manual
        concurrency: 1
        max-concurrency: 1
        retry:
          enabled: true
        
      

在瀏覽器輸入http://localhost:15672/, 在mq上我們新建了一個(gè)名為exchange1, routingKey為exhcange1-queue1的exchange, 并且映射到名為queue1的隊(duì)列,

發(fā)送消息代碼Prodcuer:

public class Sender{

    @Autowired
    private RabbitTemplate rabbitTemplate;

    public void send(Object object) {
        CorrelationData correlationData = new CorrelationData();
        correlationData.setId("exchange1-queue1-id");
        String message = "hello world";
        rabbitTemplate.convertAndSend("exchange1", "exchange1-queue1", "helloworld", new CorrelationData());
    }
}

在上面的代碼中我們發(fā)送了一個(gè)消息到名為"exchange1", routingKey為"exchange1-queue1"的消息。我們啟動(dòng)rabbitmq。
發(fā)送后可以在mq上看到如下圖已經(jīng)成功發(fā)送了。

接下來貼上接受消息的receiver代碼:

@Component
public class Receiver {

    @RabbitListener(queues = "queue1")
    public void receive(Message message, Channel channel) {
        try {
            System.out.println(message.getBody());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

接受消息后再看mq上如下圖:

可以看出queue1上Ready一欄是0,但是Unacked一欄和Total一欄依然有消息, 這是因?yàn)槲覀冊(cè)倥渲梦募性O(shè)置的是手動(dòng)的ack,這時(shí)候代碼中沒有進(jìn)行ack, mq會(huì)認(rèn)為消費(fèi)者沒有成功消費(fèi)掉這條消息, 這時(shí)候就需要在配置文件中設(shè)置成自動(dòng)ack, 或者在代碼中手動(dòng)進(jìn)行ack,在消費(fèi)者后添加如下代碼:

channel.basicAck(message.getMessageProperties().getDeliveryTag(), true);

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/73258.html

相關(guān)文章

  • RabbitMQ使用教程(一)RabbitMQ環(huán)境安裝配置及Hello World示例

    摘要:進(jìn)行插入操作的端稱為隊(duì)尾,進(jìn)行刪除操作的端稱為對(duì)頭。還有個(gè)專業(yè)術(shù)語要了解下生產(chǎn)者發(fā)送消息的應(yīng)用程序被稱為生產(chǎn)者。消費(fèi)者接收消息的應(yīng)用程序被稱為消費(fèi)者。參考鏈接下安裝及操作常用命令譯實(shí)戰(zhàn)教程一你是否聽說過或者使用過隊(duì)列? 你是否聽說過或者使用過消息隊(duì)列? 你是否聽說過或者使用過RabbitMQ? 提到這幾個(gè)詞,用過的人,也許覺得很簡(jiǎn)單,沒用過的人,也許覺得很復(fù)雜,至少在我沒使用消息隊(duì)列之前,聽...

    SegmentFault 評(píng)論0 收藏0
  • 離線安裝rabbitMQ

    摘要:安裝步驟整體軟件環(huán)境軟件版本語言安裝離線安裝是使用這種編程語言開發(fā)的,所以安裝的前提是安裝語言。這次全都是離線安裝,以便在遠(yuǎn)離的生產(chǎn)環(huán)境部署。 安裝步驟 整體軟件環(huán)境 |軟件|版本||-|-||RHEL |7 update3||Erlong|19.3||rabbitMQ|3.6.10| Erlong語言安裝離線安裝 rabbitMQ是使用erlang這種編程語言開發(fā)的,所以安裝rabb...

    superPershing 評(píng)論0 收藏0
  • SpringBoot RabbitMQ 整合使用

    摘要:可以在地址看到如何使用講解下上面命令行表示控制臺(tái)端口號(hào),可以在瀏覽器中通過控制臺(tái)來執(zhí)行的相關(guān)操作。同時(shí)從控制臺(tái)可以看到發(fā)送的速率多線程測(cè)試性能開了個(gè)線程,每個(gè)線程發(fā)送條消息。 showImg(http://ww2.sinaimg.cn/large/006tNc79ly1g5jjb62t88j30u00gwdi2.jpg); 前提 上次寫了篇文章,《SpringBoot Kafka 整合...

    yuanxin 評(píng)論0 收藏0
  • rabbitmq direct reply-to 在springAMQP和python之間使用

    摘要:在發(fā)送后端監(jiān)聽聲明的排他隊(duì)列,當(dāng)收到消息后比對(duì)正確則處理消息斷開監(jiān)聽連接,然后此隊(duì)列被系統(tǒng)自動(dòng)回收。并且通過也看到了這條消息的返回。此時(shí)我們基本已經(jīng)將問題鎖定在端了。 背景 公司的一個(gè)項(xiàng)目使用rabbitmq作為broker進(jìn)行交互,并且數(shù)據(jù)的查詢方法使用RPC模式,RPC Client端使用java編寫并使用springAMQP包與rabbitmq交互,在RPC Server端使用p...

    mikasa 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<