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

RabbitMq生產(chǎn)者發(fā)送消息確認(rèn)

這篇具有很好參考價(jià)值的文章主要介紹了RabbitMq生產(chǎn)者發(fā)送消息確認(rèn)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

RabbitMq生產(chǎn)者發(fā)送消息失敗現(xiàn)象

一般情況下RabbitMq的生產(chǎn)者能夠正常的把消息投遞到交換機(jī)Exchange,Exchange能夠根據(jù)路由鍵routingKey把消息投遞到隊(duì)列Queue,但是一旦出現(xiàn)消息無(wú)法投遞到交換機(jī)Exchange,或無(wú)法路由到Queue的這種特殊情況下,則需要對(duì)生產(chǎn)者的消息進(jìn)行緩存或者保存到數(shù)據(jù)庫(kù),后續(xù)在調(diào)查完RabbitMq服務(wù)器的問(wèn)題之后,待RabbitMq服務(wù)器正常之后,需要對(duì)這些消息進(jìn)行重新投遞。正常來(lái)說(shuō)RabbitMq做了集群之后是不會(huì)出現(xiàn)這種問(wèn)題,整個(gè)集群掛斷的概率也是非常小。

rabbitmq發(fā)送消息失敗,RabbitMq,java-rabbitmq,rabbitmq,java,Powered by 金山文檔

錯(cuò)誤信息

當(dāng)項(xiàng)目啟動(dòng)后,然后把交換機(jī)Exchange刪除后,然后生產(chǎn)者發(fā)送消息時(shí)會(huì)提示交換機(jī)不存在。Channel shutdown: channel error; protocol method: #method<channel.close>(reply-code=404, reply-text=NOT_FOUND - no exchange 'confirm_exchange' in vhost '/', class-id=60, method-id=40)

SpringBoot代碼示例

SpringBoot的application.properties需要新增spring.rabbitmq.publisher-confirm-type配置要求值是correlated。默認(rèn)值是none表示無(wú)需觸發(fā)交換機(jī)收到消息的回調(diào)接口。correlated表示消息發(fā)布后會(huì)觸發(fā)交換機(jī)收到消息的回調(diào)接口。

# springboot整合rabbitMq的配置
spring.rabbitmq.host=192.168.15.200
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=123
spring.rabbitmq.publisher-confirm-type=correlated

隊(duì)列和交換機(jī)配置類(lèi)

package springbootrabbitmq.config;

import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

@Component
public class ConfirmConfig {

    // 普通交換機(jī)名稱(chēng)
    public static final String EXCHANGE_NAME = "confirm_exchange";
    // 隊(duì)列名稱(chēng)
    public static final String QUEUE_NAME = "confirm_queue";

    public static final String ROUTING_KEY = "key1";

    @Bean("confirmExchange")
    public DirectExchange confirmExchange() {
        return new DirectExchange(EXCHANGE_NAME);
    }

    @Bean("confirmQueue")
    public Queue confirmQueue() {
        return QueueBuilder.durable(QUEUE_NAME).build();
    }
    @Bean
    public Binding queueBindingExchange(@Qualifier("confirmQueue") Queue confirmQueue, @Qualifier("confirmExchange") DirectExchange confirmExchange) {
        return BindingBuilder.bind(confirmQueue).to(confirmExchange).with(ROUTING_KEY);
    }
}

生產(chǎn)者消息發(fā)送確認(rèn)配置類(lèi)

package springbootrabbitmq.config;

import lombok.extern.slf4j.Slf4j;
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;

// 1.先實(shí)現(xiàn)RabbitTemplate.ConfirmCallback接口,從寫(xiě)confirm回調(diào)函數(shù)
@Slf4j
@Component
public class RabbitMqCallBack implements RabbitTemplate.ConfirmCallback {

    // 2.注入
    @Autowired
    private RabbitTemplate rabbitTemplate;

    /**
     *
     * @param correlationData 消息
     * @param b 發(fā)送成功是true,失敗是false
     * @param s 發(fā)送失敗時(shí)的原因
     */
    @Override
    public void confirm(CorrelationData correlationData, boolean b, String s) {
        String id = correlationData != null ? correlationData.getId() : "";
        if (b) {
            log.info("交換機(jī)已經(jīng)收到id為{}的消息", id);
        } else {
            log.error("交換機(jī)未收到id為{}的消息, 原因是:{}", id, s);
            // 消息緩存或入庫(kù),郵件提醒運(yùn)維
        }
    }

    // 3.然后在springBoot對(duì)象初始化之后再執(zhí)行rabbitTemplate.setConfirmCallback(this);設(shè)置回調(diào)函數(shù),避免使用默認(rèn)的ConfirmCallback
    @PostConstruct
    public void init() {
        rabbitTemplate.setConfirmCallback(this);
    }
}

生產(chǎn)者類(lèi)

package springbootrabbitmq.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.AmqpException;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessagePostProcessor;
import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import springbootrabbitmq.config.ConfirmConfig;
import springbootrabbitmq.config.TtlQueueConfig;

import java.util.Date;

@Slf4j
@RestController
@RequestMapping("/confirm")
public class ConfirmController {
    @Autowired
    private RabbitTemplate rabbitTemplate;
    @GetMapping("/sendMsg/{message}")
    public String sendMsg(@PathVariable String message) {
        log.info("當(dāng)前時(shí)間:{}, 發(fā)送一條消息:{} 到隊(duì)列", new Date().toString(), message);
        rabbitTemplate.convertAndSend(ConfirmConfig.EXCHANGE_NAME, ConfirmConfig.ROUTING_KEY, message);
        return "success";
    }
    @GetMapping("/sendMsg2/{message}")
    public String sendMsg2(@PathVariable String message) {
        log.info("當(dāng)前時(shí)間:{}, 發(fā)送一條消息:{} 到隊(duì)列", new Date().toString(), message);
        CorrelationData data = new CorrelationData();
        data.setId("1111");
        rabbitTemplate.convertAndSend(ConfirmConfig.EXCHANGE_NAME, ConfirmConfig.ROUTING_KEY, message, data);
        return "success";
    }
}

消費(fèi)者類(lèi)

package springbootrabbitmq.consumer;

import com.rabbitmq.client.Channel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
import springbootrabbitmq.config.ConfirmConfig;

import java.util.Date;

@Component
@Slf4j
public class ConfirmConsumer {
    //監(jiān)聽(tīng)器接收消息
    @RabbitListener(queues = ConfirmConfig.QUEUE_NAME)
    public void receiveD(Message message, Channel channel) {
        String msg = new String(message.getBody());
        log.info("當(dāng)前時(shí)間:{}, 收到一條消息:{} ", new Date().toString(), msg);
    }
}

首先正常發(fā)送,然后再刪除交換機(jī)然后再發(fā)送。測(cè)試結(jié)果如下

2023-01-29 21:07:12.367  INFO 79848 --- [nio-8080-exec-1] s.controller.ConfirmController           : 當(dāng)前時(shí)間:Sun Jan 29 21:07:12 CST 2023, 發(fā)送一條消息:12 到隊(duì)列
2023-01-29 21:07:12.399  INFO 79848 --- [nectionFactory1] s.config.RabbitMqCallBack                : 交換機(jī)已經(jīng)收到id為1111的消息
2023-01-29 21:07:12.403  INFO 79848 --- [ntContainer#0-1] s.consumer.ConfirmConsumer               : 當(dāng)前時(shí)間:Sun Jan 29 21:07:12 CST 2023, 收到一條消息:12 
2023-01-29 21:08:01.282  INFO 79848 --- [nio-8080-exec-2] s.controller.ConfirmController           : 當(dāng)前時(shí)間:Sun Jan 29 21:08:01 CST 2023, 發(fā)送一條消息:123 到隊(duì)列
2023-01-29 21:08:01.289 ERROR 79848 --- [168.15.200:5672] o.s.a.r.c.CachingConnectionFactory       : Channel shutdown: channel error; protocol method: #method<channel.close>(reply-code=404, reply-text=NOT_FOUND - no exchange 'confirm_exchange' in vhost '/', class-id=60, method-id=40)
2023-01-29 21:08:01.290 ERROR 79848 --- [nectionFactory2] s.config.RabbitMqCallBack                : 交換機(jī)未收到id為1111的消息, 原因是:channel error; protocol method: #method<channel.close>(reply-code=404, reply-text=NOT_FOUND - no exchange 'confirm_exchange' in vhost '/', class-id=60, method-id=40)

消息回退

如果不開(kāi)啟消息回退,默認(rèn)是消息即使無(wú)法發(fā)送到隊(duì)列(如路由鍵錯(cuò)誤等場(chǎng)景),也不會(huì)進(jìn)行提醒,生產(chǎn)者不知道消息能否成功發(fā)送到隊(duì)列。

解決方案

當(dāng)消息無(wú)法到達(dá)隊(duì)列的時(shí)候進(jìn)行提醒

消息回退代碼示例

配置,開(kāi)啟消息不可達(dá)目的地時(shí)的回調(diào)

spring.rabbitmq.publisher-returns=true

配置類(lèi),實(shí)現(xiàn)RabbitTemplate.ReturnCallback接口

package springbootrabbitmq.config;

import lombok.extern.slf4j.Slf4j;
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;

// 1.先實(shí)現(xiàn)RabbitTemplate.ConfirmCallback接口,從寫(xiě)confirm回調(diào)函數(shù)
@Slf4j
@Component
public class RabbitMqCallBack implements RabbitTemplate.ConfirmCallback, RabbitTemplate.ReturnCallback {

    // 2.注入
    @Autowired
    private RabbitTemplate rabbitTemplate;

    /**
     *
     * @param correlationData 消息
     * @param b 發(fā)送成功是true,失敗是false
     * @param s 發(fā)送失敗時(shí)的原因
     */
    @Override
    public void confirm(CorrelationData correlationData, boolean b, String s) {
        String id = correlationData != null ? correlationData.getId() : "";
        if (b) {
            log.info("交換機(jī)已經(jīng)收到id為{}的消息", id);
        } else {
            log.error("交換機(jī)未收到id為{}的消息, 原因是:{}", id, s);
            // 消息緩存或入庫(kù),郵件提醒運(yùn)維
        }
    }

    // 3.然后在springBoot對(duì)象初始化之后再執(zhí)行rabbitTemplate.setConfirmCallback(this);設(shè)置回調(diào)函數(shù),避免使用默認(rèn)的ConfirmCallback
    @PostConstruct
    public void init() {
        rabbitTemplate.setConfirmCallback(this);
        rabbitTemplate.setReturnCallback(this);
    }

    // 當(dāng)消息傳遞過(guò)程中不可達(dá)到目的地時(shí)將消息返回給生產(chǎn)者,只有不可達(dá)到目的地時(shí)才會(huì)調(diào)用這個(gè)方法
    @Override
    public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) {
        log.error("消息無(wú)法被寫(xiě)入隊(duì)列:{}, 退回原因:{}, 路由Key: {}", message, replyText, routingKey);
        // 郵件發(fā)送,緩存或存到數(shù)據(jù)庫(kù)
    }
}

生產(chǎn)者

@GetMapping("/sendMsg3/{message}")
    public String sendMsg3(@PathVariable String message) {
        log.info("當(dāng)前時(shí)間:{}, 發(fā)送一條消息:{} 到隊(duì)列", new Date().toString(), message);
        CorrelationData data = new CorrelationData();
        data.setId("1111");
        rabbitTemplate.convertAndSend(ConfirmConfig.EXCHANGE_NAME, ConfirmConfig.ROUTING_KEY, message, data);
        rabbitTemplate.convertAndSend(ConfirmConfig.EXCHANGE_NAME, ConfirmConfig.ROUTING_KEY+"222", message +"222", data);
        return "success";
    }

消費(fèi)者與上一個(gè)消費(fèi)者相同

測(cè)試結(jié)果如下:調(diào)用:http://127.0.0.1:8080/confirm/sendMsg3/123生產(chǎn)者的接口可以看到當(dāng)路由鍵錯(cuò)誤導(dǎo)致交換機(jī)無(wú)法把消息投遞到隊(duì)列時(shí)會(huì)回調(diào)returnedMessage方法。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-757698.html

2023-01-29 21:27:48.910  INFO 74512 --- [nio-8080-exec-1] s.controller.ConfirmController           : 當(dāng)前時(shí)間:Sun Jan 29 21:27:48 CST 2023, 發(fā)送一條消息:123 到隊(duì)列
2023-01-29 21:27:48.934  INFO 74512 --- [nectionFactory1] s.config.RabbitMqCallBack                : 交換機(jī)已經(jīng)收到id為1111的消息
2023-01-29 21:27:48.941 ERROR 74512 --- [nectionFactory1] s.config.RabbitMqCallBack                : 消息無(wú)法被寫(xiě)入隊(duì)列:(Body:'123222' MessageProperties [headers={spring_returned_message_correlation=1111}, contentType=text/plain, contentEncoding=UTF-8, contentLength=0, receivedDeliveryMode=PERSISTENT, priority=0, deliveryTag=0]), 退回原因:NO_ROUTE, 路由Key: key1222
2023-01-29 21:27:48.943  INFO 74512 --- [nectionFactory2] s.config.RabbitMqCallBack                : 交換機(jī)已經(jīng)收到id為1111的消息
2023-01-29 21:27:48.946  INFO 74512 --- [ntContainer#0-1] s.consumer.ConfirmConsumer               : 當(dāng)前時(shí)間:Sun Jan 29 21:27:48 CST 2023, 收到一條消息:123 

到了這里,關(guān)于RabbitMq生產(chǎn)者發(fā)送消息確認(rèn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • RabbitMQ學(xué)習(xí)筆記(消息發(fā)布確認(rèn),死信隊(duì)列,集群,交換機(jī),持久化,生產(chǎn)者、消費(fèi)者)

    RabbitMQ學(xué)習(xí)筆記(消息發(fā)布確認(rèn),死信隊(duì)列,集群,交換機(jī),持久化,生產(chǎn)者、消費(fèi)者)

    MQ(message queue):本質(zhì)上是個(gè)隊(duì)列,遵循FIFO原則,隊(duì)列中存放的是message,是一種跨進(jìn)程的通信機(jī)制,用于上下游傳遞消息。MQ提供“邏輯解耦+物理解耦”的消息通信服務(wù)。使用了MQ之后消息發(fā)送上游只需要依賴MQ,不需要依賴其它服務(wù)。 功能1:流量消峰 功能2:應(yīng)用解耦 功

    2024年02月07日
    瀏覽(118)
  • RabbitMQ初級(jí)篇:生產(chǎn)者與消費(fèi)者關(guān)系、消息確認(rèn)機(jī)制(ACK)、交換器與隊(duì)列進(jìn)行消息路由和存儲(chǔ)

    在RabbitMQ中,生產(chǎn)者(Producer) 負(fù)責(zé)發(fā)送消息 ,通常是應(yīng)用程序向RabbitMQ服務(wù)器發(fā)送具有特定路由鍵的消息;消費(fèi)者(Consumer)則 負(fù)責(zé)處理接收到的這些消息 。在RabbitMQ中,生產(chǎn)者和消費(fèi)者之間使用 交換器(Exchange)和隊(duì)列(Queue)進(jìn)行消息路由和存儲(chǔ) 。生產(chǎn)者將消息發(fā)送到

    2024年02月01日
    瀏覽(26)
  • 消息中間件之八股面試回答篇:一、問(wèn)題概覽+MQ的應(yīng)用場(chǎng)景+RabbitMQ如何保證消息不丟失(生產(chǎn)者確認(rèn)機(jī)制、持久化、消費(fèi)者確認(rèn)機(jī)制)+回答模板

    消息中間件之八股面試回答篇:一、問(wèn)題概覽+MQ的應(yīng)用場(chǎng)景+RabbitMQ如何保證消息不丟失(生產(chǎn)者確認(rèn)機(jī)制、持久化、消費(fèi)者確認(rèn)機(jī)制)+回答模板

    目前主流的消息隊(duì)列技術(shù)(MQ技術(shù))分為RabbitMQ和Kafka,其中深藍(lán)色為只要是MQ,一般都會(huì)問(wèn)到的問(wèn)題。淺藍(lán)色是針對(duì)RabbitMQ的特性的問(wèn)題。藍(lán)紫色為針對(duì)Kafka的特性的問(wèn)題。 MQ主要提供的功能為:異步 解耦 削峰 。 展開(kāi)來(lái)講就是 異步發(fā)送(驗(yàn)證碼、短信、郵件…) MYSQL和Redi

    2024年01月24日
    瀏覽(56)
  • RabbitMQ 生產(chǎn)者-消息丟失 之 場(chǎng)景分析

    ??生產(chǎn)者發(fā)送消息的流程如下:首先生產(chǎn)者和RabbitMQ服務(wù)器建立連接,然后創(chuàng)建信道,通過(guò)信道發(fā)送消息給RabbitMQ服務(wù)器,RabbitMQ服務(wù)器接收到消息后交由交換機(jī)進(jìn)行消息存儲(chǔ),交換機(jī)根據(jù)不同策略將消息路由到指定隊(duì)列中。在此過(guò)程中,可能會(huì)存在以下消息丟失的場(chǎng)景:

    2024年02月14日
    瀏覽(26)
  • Spring整合RabbitMQ-配制文件方式-1-消息生產(chǎn)者

    Spring-amqp是對(duì)AMQP的一些概念的一些抽象,Spring-rabbit是對(duì)RabbitMQ操作的封裝實(shí)現(xiàn)。 主要有幾個(gè)核心類(lèi) RabbitAdmin 、 RabbitTemplate 、 SimpleMessageListenerContainer 等 RabbitAdmin 類(lèi)完成對(duì)Exchange、Queue、Binding的操作,在容器中管理 了 RabbitAdmin 類(lèi)的時(shí)候,可以對(duì)Exchange、Queue、Binding進(jìn)行自動(dòng)聲

    2024年02月09日
    瀏覽(33)
  • 如何在rabbitmq中實(shí)現(xiàn)一個(gè)生產(chǎn)者,多個(gè)消費(fèi)者,多個(gè)消費(fèi)者都能收到同一條消息

    如何在rabbitmq中實(shí)現(xiàn)一個(gè)生產(chǎn)者,多個(gè)消費(fèi)者,多個(gè)消費(fèi)者都能收到同一條消息

    場(chǎng)景:用戶登錄,邀請(qǐng)其它用戶進(jìn)行視頻會(huì)議,收到邀請(qǐng)的用戶進(jìn)入會(huì)議 rabbitmq實(shí)現(xiàn)思路: 選型:發(fā)布訂閱模式(Publish/Subscribe) 一個(gè)生產(chǎn)者,多個(gè)消費(fèi)者,每一個(gè)消費(fèi)者都有自己的一個(gè)隊(duì)列,生產(chǎn)者沒(méi)有將消息直接發(fā)送到隊(duì)列,而是發(fā)送到了交換機(jī),每個(gè)隊(duì)列綁定交換機(jī),

    2023年04月25日
    瀏覽(25)
  • Kafka生產(chǎn)者原理 kafka生產(chǎn)者發(fā)送流程 kafka消息發(fā)送到集群步驟 kafka如何發(fā)送消息 kafka詳解

    Kafka生產(chǎn)者原理 kafka生產(chǎn)者發(fā)送流程 kafka消息發(fā)送到集群步驟 kafka如何發(fā)送消息 kafka詳解

    kafka尚硅谷視頻: 10_尚硅谷_Kafka_生產(chǎn)者_(dá)原理_嗶哩嗶哩_bilibili ? ???? 1. producer初始化:加載默認(rèn)配置,以及配置的參數(shù),開(kāi)啟網(wǎng)絡(luò)線程 ???? 2. 攔截器攔截 ???? 3. 序列化器進(jìn)行消息key, value序列化 ???? 4. 進(jìn)行分區(qū) ???? 5. kafka broker集群 獲取metaData ???? 6. 消息緩存到

    2024年02月11日
    瀏覽(21)
  • 多圖詳解 kafka 生產(chǎn)者消息發(fā)送過(guò)程

    多圖詳解 kafka 生產(chǎn)者消息發(fā)送過(guò)程

    生產(chǎn)者客戶端代碼 KafkaProducer 通過(guò)解析 producer.propeties 文件里面的屬性來(lái)構(gòu)造自己。例如 :分區(qū)器、Key 和 Value 序列化器、攔截器、 RecordAccumulator消息累加器 、 元信息更新器 、啟動(dòng)發(fā)送請(qǐng)求的后臺(tái)線程 生產(chǎn)者元信息更新器 我們之前有講過(guò). 客戶端都會(huì)保存集群的元信息,例如

    2023年04月09日
    瀏覽(31)
  • RabbitMQ-生產(chǎn)者可靠性

    RabbitMQ-生產(chǎn)者可靠性

    ? ? ? ? 由于網(wǎng)絡(luò)波動(dòng)導(dǎo)致客戶端無(wú)法連接上MQ,這是可以開(kāi)啟MQ的失敗后重連機(jī)制。 ? ? ? ? 注意: ? ? ? ? ? ? ? ? 是連接失敗的重試,而不是消息發(fā)送失敗后的重試。 ? ? ? ? 這種超時(shí)重連的方式是 阻塞式 的,后面的代碼沒(méi)辦法執(zhí)行,如果說(shuō)業(yè)務(wù)要求比較嚴(yán)格,則需

    2024年01月21日
    瀏覽(30)
  • SpringBoot集成RabbitMQ(生產(chǎn)者)

    SpringBoot集成RabbitMQ(生產(chǎn)者)

    默認(rèn)讀者已經(jīng)對(duì)SpringBoot和RabbitMQ比較熟悉 SpringBoot集成RabbitMQ(生產(chǎn)者)的步驟如下: 創(chuàng)建SpringBoot工程 Maven添加 spring-boot-starter-amqp 編寫(xiě)application.properties配置RabbitMQ的信息 編寫(xiě)交換機(jī)、隊(duì)列、綁定配置類(lèi) 在業(yè)務(wù)邏輯代碼中注入RabbitTemplate 調(diào)用RabbitTemplate的方法,完成消息推送

    2024年02月15日
    瀏覽(25)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包