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

整合MQ-----RabbitMQ

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

應用場景:

異步處理。把消息放入消息中間件中,等到需要的時候再去處理。

流量削峰 例如秒殺活動,在短時間內訪問量急劇增加,使用消息隊列,當消息隊列滿了就拒絕響應,跳轉到錯誤頁面,這樣就可以使得系統(tǒng)不會因為超負載而崩潰

整合MQ-----RabbitMQ,java-rabbitmq,rabbitmq,java

安裝rabbitMQ

#拉取鏡像
docker pull rabbitmq:3.8-management
#創(chuàng)建容器啟動
docker run -d --restart=always -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:3.8-management

管理后臺:http://IP:15672

  1. 搭建rabbit_util 模塊

  2. 引入依賴

    <dependencies>
        <!--rabbitmq消息隊列-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>
    </dependencies>
  3. 添加service---就是對RabbitTemplate的一個封裝,可以不封裝直接使用RabbitTemplate

  4. import org.springframework.amqp.AmqpException;
    import org.springframework.amqp.core.Message;
    import org.springframework.amqp.core.MessagePostProcessor;
    import org.springframework.amqp.rabbit.core.RabbitTemplate;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    @Service
    public class RabbitService {
    
        //  引入操作rabbitmq 的模板
        @Autowired
        private RabbitTemplate rabbitTemplate;
    
        /**
         * 發(fā)送消息
         * @param exchange  交換機
         * @param routingKey    路由鍵
         * @param message   消息
         * @return
         */
        public boolean sendMessage(String exchange,String routingKey, Object message){
            //  調用發(fā)送數(shù)據(jù)的方法
            rabbitTemplate.convertAndSend(exchange,routingKey,message);
            return true;
        }
    
        /**
         * 發(fā)送延遲消息的方法
         * @param exchange  交換機
         * @param routingKey    路由鍵
         * @param message   消息內容
         * @param delayTime 延遲時間
         * @return
         */
        public boolean sendDelayMessage(String exchange,String routingKey, Object message, int delayTime){
    
            //  在發(fā)送消息的時候設置延遲時間
            rabbitTemplate.convertAndSend(exchange, routingKey, message, new MessagePostProcessor() {
                @Override
                public Message postProcessMessage(Message message) throws AmqpException {
                    //  設置一個延遲時間
                    message.getMessageProperties().setDelay(delayTime*1000);
                    return message;
                }
            });
            return true;
        }
    }

?配置mq消息轉換器

import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MQConfig {

    @Bean
    public MessageConverter messageConverter(){
        return new Jackson2JsonMessageConverter();
    }
}

說明:默認是字符串轉換器

添加消息的確認配置文章來源地址http://www.zghlxwxcb.cn/news/detail-775880.html

import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;

@Component
public class MQProducerAckConfig implements RabbitTemplate.ReturnCallback,RabbitTemplate.ConfirmCallback {

    //  我們發(fā)送消息使用的是 private RabbitTemplate rabbitTemplate; 對象
    //  如果不做設置的話 當前的rabbitTemplate 與當前的配置類沒有任何關系!
    @Autowired
    private RabbitTemplate rabbitTemplate;

    //  設置 表示修飾一個非靜態(tài)的void方法,在服務器加載Servlet的時候運行。并且只執(zhí)行一次!
    @PostConstruct
    public void init(){
        rabbitTemplate.setReturnCallback(this);
        rabbitTemplate.setConfirmCallback(this);
    }

    /**
     * 表示消息是否正確發(fā)送到了交換機上
     * @param correlationData   消息的載體
     * @param ack   判斷是否發(fā)送到交換機上
     * @param cause 原因
     */
    @Override
    public void confirm(CorrelationData correlationData, boolean ack, String cause) {
        if(ack){
            System.out.println("消息發(fā)送成功!");
        }else {
            System.out.println("消息發(fā)送失敗!"+cause);
        }
    }

    /**
     * 消息如果沒有正確發(fā)送到隊列中,則會走這個方法!如果消息被正常處理,則這個方法不會走!
     * @param message
     * @param replyCode
     * @param replyText
     * @param exchange
     * @param routingKey
     */
    @Override
    public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) {
        System.out.println("消息主體: " + new String(message.getBody()));
        System.out.println("應答碼: " + replyCode);
        System.out.println("描述:" + replyText);
        System.out.println("消息使用的交換器 exchange : " + exchange);
        System.out.println("消息使用的路由鍵 routing : " + routingKey);
    }
}

到了這里,關于整合MQ-----RabbitMQ的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關文章

  • Java整合RabbitMQ實現(xiàn)生產(chǎn)消費(7種通訊方式)

    Java整合RabbitMQ實現(xiàn)生產(chǎn)消費(7種通訊方式)

    RabbitMQ環(huán)境,參考RabbitMQ環(huán)境搭建 Java版本:JDK1.8 Maven版本:apache-maven-3.6.3 開發(fā)工具:IntelliJ IDEA 創(chuàng)建maven項目 pom.xml文件引入RabbitMQ依賴 即一個生產(chǎn)者可以向一個隊列發(fā)送消息,一個消費者可以嘗試從一個隊列接收數(shù)據(jù)。如下圖: 與簡單通訊一樣,當消費能力不足或想要提高

    2024年02月04日
    瀏覽(26)
  • MQ 簡介-RabbitMQ

    消息隊列作為高并發(fā)系統(tǒng)的核心組件之一,能夠幫助業(yè)務系統(tǒng)結構提升開發(fā)效率和系統(tǒng) 穩(wěn)定性,消息隊列主要具有以下特點: 削峰填谷 :主要解決瞬時寫壓力大于應用服務能力導致消息丟失、系統(tǒng)奔潰等問題 系統(tǒng)解耦 :解決不同重要程度、不同能力級別系統(tǒng)之間依賴導致一死

    2024年02月11日
    瀏覽(16)
  • MQ學習筆記--(RabbitMQ)

    初識MQ RabbitMQ快速入門 SpringAMQP 同步通訊 異步通訊 MQ常見框架 同步通訊和異步通訊 同步通訊:比如微信視頻,同一時間只能跟一個人視頻,其他人想跟你視頻的話,得等你這個視頻結束之后才可以 異步通信:比如微信發(fā)消息,發(fā)了一個人后,別人可能還沒回你,但你還可以

    2024年02月08日
    瀏覽(15)
  • MQ-消息隊列-RabbitMQ

    MQ-消息隊列-RabbitMQ

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

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

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

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

    2024年02月05日
    瀏覽(40)
  • RabbitMQ --- 惰性隊列、MQ集群

    RabbitMQ --- 惰性隊列、MQ集群

    當生產(chǎn)者發(fā)送消息的速度超過了消費者處理消息的速度,就會導致隊列中的消息堆積,直到隊列存儲消息達到上限。之后發(fā)送的消息就會成為死信,可能會被丟棄,這就是消息堆積問題。 解決消息堆積有三種思路: 增加更多消費者,提高消費速度。也就是我們之前說的work

    2024年02月03日
    瀏覽(39)
  • 【mq】RabbitMq批量刪除隊列

    ?由于部分公司同事使用RabbitMq時,沒有將Client設置為autodelete,導致大量冗余隊列。其中這些隊列又是無routekey隊列,收到了批量的訂閱消息,占用服務器內存。 ?如何將這些無用的隊列刪除成為一個問題?經(jīng)過多次摸索,在rabbitmq management api里面找到了方案:

    2024年01月25日
    瀏覽(17)
  • 消息隊列-RabbitMQ:MQ作用分類、RabbitMQ核心概念及消息生產(chǎn)消費調試

    消息隊列-RabbitMQ:MQ作用分類、RabbitMQ核心概念及消息生產(chǎn)消費調試

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

    2024年02月20日
    瀏覽(28)
  • RabbitMQ之MQ可靠性

    RabbitMQ之MQ可靠性

    RabbitMQ實現(xiàn)數(shù)據(jù)持久化包括3個方面 (1)交換機持久化 (2)隊列持久化 (3)消息持久化 注:開啟持久化和生產(chǎn)者確認時,RabbitMQ只有在消息持久化完成后才會給生產(chǎn)者返回ACK回執(zhí) 從RabbitMQ的3.6.0版本開始,就增加了Lazy Queue的概念,也就是惰性隊列 注:從3.12版本后,所有隊

    2024年01月21日
    瀏覽(25)
  • MQ消息隊列(主要介紹RabbitMQ)

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

    消息隊列概念:是在消息的傳輸過程中保存消息的容器。 作用:異步處理、應用解耦、流量控制..... RabbitMQ: ? ? SpringBoot繼承RabbitMQ步驟: ? ? ? ? 1.加入依賴 ? ? ? ? ?2.配置 ? ? ? ? 3.開啟(如果不需要監(jiān)聽消息也就是不消費就不需要該注解開啟) ? ? ? ? 4.創(chuàng)建隊列、

    2024年02月11日
    瀏覽(33)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包