国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

MQ消息隊(duì)列(主要介紹RabbitMQ)

這篇具有很好參考價值的文章主要介紹了MQ消息隊(duì)列(主要介紹RabbitMQ)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

消息隊(duì)列概念:是在消息的傳輸過程中保存消息的容器。

作用:異步處理、應(yīng)用解耦、流量控制.....

RabbitMQ:

MQ消息隊(duì)列(主要介紹RabbitMQ),rabbitmq,分布式

?

MQ消息隊(duì)列(主要介紹RabbitMQ),rabbitmq,分布式

?

SpringBoot繼承RabbitMQ步驟:

? ? ? ? 1.加入依賴

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>

? ? ? ? ?2.配置

spring:
  rabbitmq:
    host: 192.168.127.129
    virtual-host: /  # 指定虛擬主機(jī)
    port: 5672

? ? ? ? 3.開啟(如果不需要監(jiān)聽消息也就是不消費(fèi)就不需要該注解開啟)

@EnableRabbit

? ? ? ? 4.創(chuàng)建隊(duì)列、交換機(jī)、以及綁定它們之間的關(guān)系

? ?

@Configuration
public class MyMQConfig {


    


    /**
     * 創(chuàng)建隊(duì)列
     * @return
     */
    @Bean
    public Queue createQueue(){
        //String name, boolean durable, boolean exclusive, boolean autoDelete, @Nullable Map<String, Object> arguments
        Queue queue = new Queue("order.queue",true,false,false);
        return queue;
    }


    /**
     * 創(chuàng)建交換機(jī)
     * @return
     */
    @Bean
    public Exchange createExchange(){
        //因?yàn)檫@個交換機(jī)需要根據(jù)路由進(jìn)行發(fā)送  所以使用TopicExchange

        //String name, boolean durable, boolean autoDelete, Map<String, Object> arguments
        TopicExchange topicExchange = new TopicExchange("order-event-exchange",true,false);
        return  topicExchange;
    }



    /**
     * 通過路由綁定交換機(jī)和隊(duì)列之間的關(guān)系
     * @return
     */
    @Bean
    public Binding createBinding(){
        //String destination, Binding.DestinationType destinationType, String exchange, String routingKey, @Nullable Map<String, Object> arguments
        Binding binding = new Binding("order.queue",
                Binding.DestinationType.QUEUE,
                "order-event-exchange",
                "order.route",
                null
        );
        return binding;
    }

}

? ? ? ? 4.發(fā)送消息

    @Autowired
    RabbitTemplate rabbitTemplate;

    @ResponseBody
    @GetMapping("/sendmq")
    public String sendmq(){
        OrderEntity orderEntity = new OrderEntity();
        orderEntity.setOrderSn(UUID.randomUUID().toString());
        //發(fā)送消息  String exchange, String routingKey, Object message, MessagePostProcessor messagePostProcessor, @Nullable CorrelationData correlationData
        rabbitTemplate.convertAndSend("order-event-exchange","order.route",orderEntity);
        return "ok";
    }

? ? ? ? 5.消費(fèi)消息(監(jiān)聽消息)

@Component
@RabbitListener(queues = "create.queue")
public class OrderCloseListener {

   
    @RabbitHandler
    public void orderClose(OrderEntity orderEntity, Message message, Channel channel) throws IOException {
        System.out.println("消費(fèi)消息");

    }
}

問題1:以上消息發(fā)送和消費(fèi)中,如果傳輸?shù)臄?shù)據(jù)是java對象,默認(rèn)使用的jdk序列化機(jī)制,我們經(jīng)常需要使用json傳遞就需要修改傳輸格式j(luò)son

修改方法如下:

@Configuration
public class RabbitConfig {

    //發(fā)送消息為對象的時候  使用json的格式
    @Bean
    public MessageConverter messageConverter(){
        return new Jackson2JsonMessageConverter();
    }

}

問題2:在消息的發(fā)送和消費(fèi)還有消息儲存過程中,我們需要保證消息的可靠性,避免消息的丟失保證業(yè)務(wù)數(shù)據(jù)的正確

? ? ? ? 1.消息儲存:使用持久化

? ? ? ? 1.消息發(fā)送:開啟消息投靠確認(rèn)機(jī)制

spring:
  rabbitmq:
    host: 192.168.127.129
    virtual-host: /  # 指定虛擬主機(jī)
    port: 5672
#    publisher-confirms: true
    publisher-confirm-type: simple # 開啟生產(chǎn)者消息確認(rèn)模式
    publisher-returns: true
@Configuration
public class RabbitConfig {

    @Autowired
    RabbitTemplate rabbitTemplate;



    /**
     * 定制rabbitTemplate
     * 消息發(fā)送確認(rèn)
     */
    @PostConstruct //表示RabbitConfig對象創(chuàng)建之后執(zhí)行該方法
    public void initRabbitTemplate(){
        //消息成功發(fā)送到服務(wù)器之后的成功回調(diào)
        rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback() {
            /**
             *
             * @param correlationData  消息的唯一id
             * @param b  消息是否成功
             * @param s  消息失敗的原因
             */
            @Override
            public void confirm(CorrelationData correlationData, boolean b, String s) {
                System.out.println("confirm===correlationData:"+ correlationData+ "ack:"+ b);
            }
        });


        //消息發(fā)送到隊(duì)列queue失敗執(zhí)行的回調(diào)
        rabbitTemplate.setReturnCallback(new RabbitTemplate.ReturnCallback() {
            /**
             *
             * @param message  消息的內(nèi)容
             * @param i    回復(fù)的狀態(tài)碼
             * @param s     回復(fù)的文本內(nèi)容
             * @param s1    那個交換機(jī)
             * @param s2    那個路由key
             *
             *              最常見的就是路由key不對
             */
            @Override
            public void returnedMessage(Message message, int i, String s, String s1, String s2) {
                System.out.println("fail====>message:"+ message+"狀態(tài)碼:"+i + "錯誤提示:"+ s+ "交換機(jī):"+s1 + "路由:"+ s2);
            }
        });
    }
}

異常操作之后可以達(dá)到消息發(fā)送端確認(rèn)機(jī)制

? ? ? ? 3.消息消費(fèi)端的確認(rèn)機(jī)制

spring:
  rabbitmq:
    host: 192.168.127.129
    virtual-host: /  # 指定虛擬主機(jī)
    port: 5672
#    publisher-confirms: true
    publisher-confirm-type: simple # 開啟生產(chǎn)者消息確認(rèn)模式
    publisher-returns: true
    template:
      mandatory: true
    listener:
      simple:
        acknowledge-mode: manual # 開啟消費(fèi)者 手動簽收消息功能
@Service
@RabbitListener(queues = "create.queue")
public class OrderCloseListener {

    @RabbitHandler
    public void orderClose(OrderEntity orderEntity, Message message, Channel channel) throws IOException {
        System.out.println("消費(fèi)消息。。。.");
        try{
            //業(yè)務(wù)邏輯
            //手動確認(rèn)消息消費(fèi)成功,消息不在寫人隊(duì)列
            channel.basicAck(message.getMessageProperties().getDeliveryTag(),false);
        }catch (Exception e){
            //消息消費(fèi)失敗(業(yè)務(wù)失?。瑢⑾⒃诖螌懙疥?duì)列避免消息丟失
            channel.basicReject(message.getMessageProperties().getDeliveryTag(),true);
        }


    }
}

通過以上消息的發(fā)送和消費(fèi)端都確認(rèn)之后我們消息一定的是可靠的。

案例:

? ? ? ? 在實(shí)際的開發(fā)中我們經(jīng)常會有取消訂單的功能,就可以使用消息隊(duì)列延遲消費(fèi)消息,具體實(shí)現(xiàn)通過個死信隊(duì)列,把消息先放到死信隊(duì)列,當(dāng)消息到期之后轉(zhuǎn)到到期隊(duì)列,監(jiān)聽到期隊(duì)列然后達(dá)到訂單取消功能文章來源地址http://www.zghlxwxcb.cn/news/detail-668436.html

到了這里,關(guān)于MQ消息隊(duì)列(主要介紹RabbitMQ)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • MQ-消息隊(duì)列-RabbitMQ

    MQ-消息隊(duì)列-RabbitMQ

    MQ(Message Queue) 消息隊(duì)列 ,是基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)中“ 先進(jìn)先出 ”的一種 數(shù)據(jù)結(jié)構(gòu) 。指把要傳輸?shù)臄?shù)據(jù)(消息)放在隊(duì)列中,用隊(duì)列機(jī)制來實(shí)現(xiàn)消息傳遞——生產(chǎn)者產(chǎn)生消息并把消息放入隊(duì)列,然后由消費(fèi)者去處理。消費(fèi)者可以到指定隊(duì)列拉取消息,或者訂閱相應(yīng)的隊(duì)列,由

    2024年02月09日
    瀏覽(25)
  • 消息隊(duì)列-RabbitMQ:MQ作用分類、RabbitMQ核心概念及消息生產(chǎn)消費(fèi)調(diào)試

    消息隊(duì)列-RabbitMQ:MQ作用分類、RabbitMQ核心概念及消息生產(chǎn)消費(fèi)調(diào)試

    1)什么是 MQ MQ (message queue),從字面意思上看, 本質(zhì)是個隊(duì)列,F(xiàn)IFO 先入先出 ,只不過隊(duì)列中存放的內(nèi)容是 message 而已,還是一種 跨進(jìn)程的通信機(jī)制 , 用于上下游傳遞消息 。在互聯(lián)網(wǎng)架構(gòu)中,MQ 是一種非常常見的上下游 “ 邏輯解耦 + 物理解耦” 的消息通信服務(wù) 。 使用了

    2024年02月20日
    瀏覽(27)
  • MQ消息隊(duì)列,以及RabbitMQ詳細(xì)(中1)五種rabbitMQ實(shí)用模型

    MQ消息隊(duì)列,以及RabbitMQ詳細(xì)(中1)五種rabbitMQ實(shí)用模型

    書接上文,展示一下五種模型我使用的是spring could 微服務(wù)的框架 文章說明: ? ? ? ? 本文章我會分享總結(jié)5種實(shí)用的rabbitMQ的實(shí)用模型 1、hello world簡單模型 2、work queues工作隊(duì)列 3、Publish/Subscribe發(fā)布訂閱模型 4、Routing路由模型 5、Topics 主題模型 (贈送) 6、消息轉(zhuǎn)換器 Rabbi

    2024年02月05日
    瀏覽(39)
  • 分布式消息隊(duì)列RabbitMQ-Linux下服務(wù)搭建,面試完騰訊我才發(fā)現(xiàn)這些知識點(diǎn)竟然沒掌握全

    分布式消息隊(duì)列RabbitMQ-Linux下服務(wù)搭建,面試完騰訊我才發(fā)現(xiàn)這些知識點(diǎn)竟然沒掌握全

    vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.5/ebin/rabbit.app 5.修改配置文件 這里面修改{loopback_users, [“guest”]}改為{loopback_users, []} {application, rabbit, %% - - erlang - - [{description, “RabbitMQ”}, {id, “RabbitMQ”}, {vsn, “3.6.5”}, {modules, [‘background_gc’,‘delegate’,‘delegate_sup’,‘dtree’,‘file_han

    2024年04月14日
    瀏覽(27)
  • RaabitMQ(三) - RabbitMQ隊(duì)列類型、死信消息與死信隊(duì)列、懶隊(duì)列、集群模式、MQ常見消息問題

    RaabitMQ(三) - RabbitMQ隊(duì)列類型、死信消息與死信隊(duì)列、懶隊(duì)列、集群模式、MQ常見消息問題

    這是RabbitMQ最為經(jīng)典的隊(duì)列類型。在單機(jī)環(huán)境中,擁有比較高的消息可靠性。 經(jīng)典隊(duì)列可以選擇是否持久化(Durability)以及是否自動刪除(Auto delete)兩個屬性。 Durability有兩個選項(xiàng),Durable和Transient。 Durable表示隊(duì)列會將消息保存到硬盤,這樣消息的安全性更高。但是同時,由于需

    2024年02月14日
    瀏覽(1047)
  • mq 消息隊(duì)列 mqtt emqx ActiveMQ RabbitMQ RocketMQ

    十幾年前,淘寶的notify,借鑒ActiveMQ。京東的ActiveMQ集群幾百臺,后面改成JMQ。 Linkedin的kafka,因?yàn)槭莝cala,國內(nèi)很多人不熟。淘寶的人把kafka用java寫了一遍,取名metaq,后來再改名RocketMQ。 總的來說,三大原因,語言、潮流、生態(tài)。 MQ這種東西,當(dāng)你的消息量不大的時候,用啥

    2024年02月12日
    瀏覽(17)
  • .NetCore 使用 RabbitMQ (交換機(jī)/隊(duì)列/消息持久化+mq高級特性+死信隊(duì)列+延遲隊(duì)列)

    .NetCore 使用 RabbitMQ (交換機(jī)/隊(duì)列/消息持久化+mq高級特性+死信隊(duì)列+延遲隊(duì)列)

    目錄 一、安裝mq 二、實(shí)操 1、簡單模式 2、工作模式 3、fanout扇形模式(發(fā)布訂閱) 4、direct路由模式也叫定向模式 5、topic主題模式也叫通配符模式(路由模式的一種) 6、header 參數(shù)匹配模式 7、延時隊(duì)列(插件方式實(shí)現(xiàn)) 參考資料: 1、我的環(huán)境是使用VMware安裝的Centos7系統(tǒng)。MQ部署

    2023年04月09日
    瀏覽(111)
  • 消息隊(duì)列中間件 - Docker安裝RabbitMQ、AMQP協(xié)議、和主要角色

    消息隊(duì)列中間件 - Docker安裝RabbitMQ、AMQP協(xié)議、和主要角色

    不管是微服務(wù)還是分布式的系統(tǒng)架構(gòu)中,消息隊(duì)列中間件都是不可缺少的一個重要環(huán)節(jié),主流的消息隊(duì)列中間件有RabbitMQ、RocketMQ等等,從這篇開始詳細(xì)介紹以RabbitMQ為代表的消息隊(duì)列中間件。 AMQP協(xié)議 AMQP協(xié)議是一個提供統(tǒng)一消息服務(wù)的應(yīng)用層標(biāo)準(zhǔn)協(xié)議,基于此協(xié)議的客戶端與

    2024年02月03日
    瀏覽(92)
  • MQ(消息中間件)概述及 RabbitMQ 的基本介紹

    MQ(消息中間件)概述及 RabbitMQ 的基本介紹

    消息隊(duì)列中間件是分布式系統(tǒng)中重要的組件,主要解決 應(yīng)用解耦,異步消息,流量削鋒等 問題,實(shí)現(xiàn)高性能,高可用,可伸縮和最終一致性架構(gòu)。流量削鋒 : 削減峰值壓力(秒殺,搶購) MQ(Message Queue,消息隊(duì)列)是典型的生產(chǎn)者、消費(fèi)者模型。生產(chǎn)者不斷向消息隊(duì)列中

    2024年02月12日
    瀏覽(24)
  • 【RabbitMQ筆記10】消息隊(duì)列RabbitMQ之死信隊(duì)列的介紹

    【RabbitMQ筆記10】消息隊(duì)列RabbitMQ之死信隊(duì)列的介紹

    這篇文章,主要介紹消息隊(duì)列RabbitMQ之死信隊(duì)列。 目錄 一、RabbitMQ死信隊(duì)列 1.1、什么是死信隊(duì)列 1.2、設(shè)置過期時間TTL 1.3、配置死信交換機(jī)和死信隊(duì)列(代碼配置) (1)設(shè)置隊(duì)列過期時間 (2)設(shè)置單條消息過期時間 (3)隊(duì)列設(shè)置死信交換機(jī) (4)配置的基本思路 1.4、配置

    2024年02月16日
    瀏覽(95)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包