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

Centos安裝RabbitMQ,JavaSpring發(fā)送RabbitMQ延遲延時(shí)消息,JavaSpring消費(fèi)RabbitMQ消息

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

1,版本說(shuō)明

erlang 和 rabbitmq 版本說(shuō)明
https://www.rabbitmq.com/which-erlang.html
確認(rèn)需要安裝的mq版本以及對(duì)應(yīng)的erlang版本。

2,下載安裝文件

RabbitMQ下載地址:
https://packagecloud.io/rabbitmq/rabbitmq-server

Erlang下載地址:
https://packagecloud.io/rabbitmq/erlang

RabbitMQ延遲消息插件下載
https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases

下載文件如圖

Centos安裝RabbitMQ,JavaSpring發(fā)送RabbitMQ延遲延時(shí)消息,JavaSpring消費(fèi)RabbitMQ消息,java,MQ,centos,rabbitmq,java,延遲消息

3,安裝步驟

3.1, 查詢(xún)是否有安裝過(guò)erlang、rabbitmq, 查詢(xún)到有的話(huà)需要?jiǎng)h除。

	rpm -qa | grep rabbitmq-server
	rpm -qa | grep erlang
	# 刪除
	yum -y remove rabbitmq-server.noarch

3.2, 本地安裝erlang

	yum localinstall erlang-23.2.7-2.el7.x86_64.rpm
	# 查詢(xún)安裝的版本
	erl -version
	# Erlang (SMP,ASYNC_THREADS,HIPE) (BEAM) emulator version xxx

3.3, 本地安裝rabbitmq

	yum localinstall rabbitmq-server-3.9.0-1.el7.noarch.rpm
	# 啟動(dòng)rabbitmq
	systemctl start rabbitmq-server

	# 查看rabbitmq狀態(tài)
	systemctl status rabbitmq-server

	# 設(shè)置rabbitmq服務(wù)開(kāi)機(jī)自啟動(dòng)
	systemctl enable rabbitmq-server

	# 關(guān)閉rabbitmq服務(wù)
	systemctl stop rabbitmq-server

	# 重啟rabbitmq服務(wù)
	systemctl restart rabbitmq-server

3.4, mq 端口開(kāi)放:

	firewall-cmd --zone=public --add-port=5672/tcp --permanent
	firewall-cmd --zone=public --add-port=15672/tcp --permanent
	firewall-cmd --reload
	firewall-cmd --zone=public --list-ports

3.5, 安裝mq管理界面

	
	# 啟用管理界面插件
	rabbitmq-plugins enable rabbitmq_management

	curl http://localhost:15672 就可以打開(kāi)web管理頁(yè)面

	# rabbitmq有一個(gè)默認(rèn)的賬號(hào)密碼guest,但該情況僅限于本機(jī)localhost進(jìn)行訪(fǎng)問(wèn),所以需要添加一個(gè)遠(yuǎn)程登錄的用戶(hù)

	# 添加用戶(hù)
	rabbitmqctl add_user 用戶(hù)名 密碼

	rabbitmqctl add_user admin 123456

	# 設(shè)置用戶(hù)角色,分配操作權(quán)限
	rabbitmqctl set_user_tags 用戶(hù)名 角色

	rabbitmqctl set_user_tags admin administrator

	# 為用戶(hù)添加資源權(quán)限(授予訪(fǎng)問(wèn)虛擬機(jī)根節(jié)點(diǎn)的所有權(quán)限)
	rabbitmqctl set_permissions -p / 用戶(hù)名 ".*" ".*" ".*"

	rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

	# 角色有四種:
	# administrator:可以登錄控制臺(tái)、查看所有信息、并對(duì)rabbitmq進(jìn)行管理
	# monToring:監(jiān)控者;登錄控制臺(tái),查看所有信息
	# policymaker:策略制定者;登錄控制臺(tái)指定策略
	# managment:普通管理員;登錄控制

	# 修改密碼
	rabbitmqctl change_ password 用戶(hù)名 新密碼

	# 刪除用戶(hù)
	rabbitmqctl delete_user 用戶(hù)名

	# 查看用戶(hù)清單
	rabbitmqctl list_users

3.6, 延遲消息插件安裝:

    # 把插件包先復(fù)制到	 /usr/lib/rabbitmq/lib/rabbitmq_server-3.9.0/plugins
    cp rabbitmq_delayed_message_exchange-3.9.0.ez /usr/lib/rabbitmq/lib/rabbitmq_server-3.9.0/plugins/
	rabbitmq-plugins enable rabbitmq_delayed_message_exchange
	#重啟mq		
	systemctl restart rabbitmq-server
	rabbitmq-plugins list

3.7,登錄測(cè)試

訪(fǎng)問(wèn)地址: ip:15672 賬號(hào)密碼: admin 123456
Centos安裝RabbitMQ,JavaSpring發(fā)送RabbitMQ延遲延時(shí)消息,JavaSpring消費(fèi)RabbitMQ消息,java,MQ,centos,rabbitmq,java,延遲消息

找到交換機(jī) exchange,看看類(lèi)型是否有延遲消息類(lèi)型的
Centos安裝RabbitMQ,JavaSpring發(fā)送RabbitMQ延遲延時(shí)消息,JavaSpring消費(fèi)RabbitMQ消息,java,MQ,centos,rabbitmq,java,延遲消息

然后就可以寫(xiě)代碼去連接發(fā)消息了。

4, Java代碼

4.1, pom 引入:

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

4.2, 配置類(lèi):

import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitMQConfig {

    @Bean
    public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory) {
        RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory);
        rabbitAdmin.setAutoStartup(true);
        return rabbitAdmin;
    }

}

4.3, 消息定義配置類(lèi):


import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;

@Configuration
public class OrderRabbitMQConfig {

    @Autowired
    private RabbitAdmin rabbitAdmin;
    //================================訂單延時(shí)=================================
    @Bean
    CustomExchange order_pay_delay_exchange() {
        HashMap<String, Object> args = new HashMap<>();
        args.put("x-delayed-type", "direct");
        return new CustomExchange("order_pay_delay_exchange", "x-delayed-message", true, false, args);
    }
    @Bean
    public Queue order_pay_delay_queue() {
        Queue queue = new Queue("order_pay_delay_queue", true, false, false);
        rabbitAdmin.declareQueue(queue);
        return queue;
    }
    @Bean
    public Binding order_pay_delay_binding() {
        return BindingBuilder.bind(order_pay_delay_queue())
                .to(order_pay_delay_exchange()).with("order_pay_delay_routing").noargs();
    }

    //================================訂單支付通知======================================
    @Bean
    public DirectExchange order_pay_notify_exchange() {
        return new DirectExchange("order_pay_notify_exchange", true, false);
    }
    @Bean
    public Queue order_pay_notify_direct_queue() {
        Map<String, Object> argsMap = new HashMap<>();
        argsMap.put("x-max-priority", 5);
        Queue queue = new Queue("order_pay_notify_queue", true, false, false, argsMap);
        rabbitAdmin.declareQueue(queue);
        return queue;
    }
    @Bean
    public Binding ctc_bidding_auction_pay_notify_binding() {
        return BindingBuilder.bind(order_pay_notify_direct_queue())
                .to(order_pay_notify_exchange()).with("order_pay_notify_routing");
    }
}

4.4, 消息發(fā)送類(lèi):


import cn.hutool.json.JSONUtil;
import com.xxx.rabbitmq.dto.PayOrderNotifyDto;
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.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Slf4j
@Component
public class RabbitMQSendUtils {

    private static RabbitTemplate rabbitTemplate;

    @Autowired
    public RabbitMQSendUtils(RabbitTemplate rabbitTemplate) {
        this.rabbitTemplate = rabbitTemplate;
    }

    /**
     * 訂單支付延時(shí)通知、發(fā)送MQ消息
     */
    public static void sendPayDelayMessage(PayOrderNotifyDto dto, final Integer delayTimes) {
        //給延遲隊(duì)列發(fā)送消息
        String msg = JSONUtil.toJsonStr(dto);
        log.info("訂單支付延時(shí)通知、發(fā)送MQ消息: {}, delayTimes={}", msg, delayTimes);
        rabbitTemplate.convertAndSend("order_pay_delay_exchange", "order_pay_delay_routing", msg, new MessagePostProcessor() {
            @Override
            public Message postProcessMessage(Message message) throws AmqpException {
                //給消息設(shè)置延遲毫秒值
                message.getMessageProperties().setDelay(delayTimes);
                return message;
            }
        });
    }

    /**
     * 訂單支付通知,發(fā)送MQ消息
     */
    public static void sendPayNotifyMsg(PayOrderNotifyDto dto) {
        log.info("訂單支付通知,發(fā)送MQ消息: {}", dto);
        rabbitTemplate.convertAndSend("order_pay_notify_exchange", "order_pay_notify_routing", JSONUtil.toJsonStr(dto));
    }
}

4.5, 消息監(jiān)聽(tīng)消費(fèi)類(lèi):文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-715957.html


import cn.hutool.json.JSONUtil;
import com.xxx.rabbitmq.dto.PayOrderNotifyDto;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
 * MQ消費(fèi)監(jiān)聽(tīng)
 */
@Slf4j
@Component
public class OrderMQListener {
    /**
     * 訂單延時(shí)通知 消息
     */
    @RabbitListener(queues = {"order_pay_delay_queue"})
    public void payDelayNotify(Message message) {
        try {
            String msg = new String(message.getBody());
            log.info("【消費(fèi)】訂單延時(shí)通知 MQ 消息內(nèi)容: {}, Message={}", msg, message);
            //支付訂單改成超時(shí)未支付》取消
            PayOrderNotifyDto dto = JSONUtil.toBean(msg, PayOrderNotifyDto.class);

        } catch (Exception e) {
            log.error("訂單延時(shí)通知 消息消費(fèi)失?。?, e);
        }
    }
    /**
     * 訂單支付通知 消息
     */
    @RabbitListener(queues = {"order_pay_notify_queue"})
    public void payNotify(Message message) {
        try {
            String msg = new String(message.getBody());
            log.info("訂單支付通知 MQ 消息內(nèi)容:{}, {}", msg, message);
            PayOrderNotifyDto payOrderNotifyDto = JSONUtil.toBean(msg, PayOrderNotifyDto.class);
        } catch (Exception e) {
            log.error("訂單支付通知 消息消費(fèi)失敗:", e);
        }
    }

}

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

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀(guān)點(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應(yīng)用延時(shí)消息

    RabbitMq應(yīng)用延時(shí)消息

    一.建立綁定關(guān)系 二.建立生產(chǎn)者 1.消息實(shí)體 三.建立消費(fèi)者 四.測(cè)試類(lèi)測(cè)試 五.效果如圖所示

    2024年02月12日
    瀏覽(24)
  • RabbitMQ 延時(shí)消息實(shí)現(xiàn)

    RabbitMQ 延時(shí)消息實(shí)現(xiàn)

    導(dǎo)入Spring 集成RabbitMQ MAEVN 推送消息至延遲隊(duì)列 - 消息過(guò)期自動(dòng)推送到死信隊(duì)列 - 消費(fèi)死信隊(duì)列 2.1. MQ配置信息 2.1.1. 自定義隊(duì)列配置 …/bootstrap.yml 2.1.2. 讀取自定義MQ配置信息 2.2. 配置文件自動(dòng)生成隊(duì)列 2.2.1. 延遲隊(duì)列 2.2.2. 死信隊(duì)列 2.3. 生產(chǎn)者推送消息 2.4. 消費(fèi)者處理消息 設(shè)

    2024年04月26日
    瀏覽(26)
  • 【RabbitMQ】 RabbitMQ 消息的延遲 —— 深入探索 RabbitMQ 的死信交換機(jī),消息的 TTL 以及延遲隊(duì)列

    【RabbitMQ】 RabbitMQ 消息的延遲 —— 深入探索 RabbitMQ 的死信交換機(jī),消息的 TTL 以及延遲隊(duì)列

    消息隊(duì)列是現(xiàn)代分布式應(yīng)用中的關(guān)鍵組件,用于實(shí)現(xiàn)異步通信、解耦系統(tǒng)組件以及處理高并發(fā)請(qǐng)求。消息隊(duì)列可以用于各種應(yīng)用場(chǎng)景,包括任務(wù)調(diào)度、事件通知、日志處理等。在消息隊(duì)列的應(yīng)用中,有時(shí)需要實(shí)現(xiàn)消息的延遲處理、處理未能成功消費(fèi)的消息等功能。 本文將介紹

    2024年02月05日
    瀏覽(96)
  • 使用StreamBridge實(shí)現(xiàn)RabbitMq 消息收發(fā) && ack確認(rèn) && 延時(shí)消息

    使用StreamBridge實(shí)現(xiàn)RabbitMq 消息收發(fā) && ack確認(rèn) && 延時(shí)消息

    下載地址:link 1.下載完成放到rabbitmq安裝目錄plugins下 2.執(zhí)行命令啟用插件 3.重啟mq Exchanges - add a new exchange - type 出現(xiàn)x-delayed-message即安裝成功

    2024年02月11日
    瀏覽(57)
  • 消息隊(duì)列-RabbitMQ:延遲隊(duì)列、rabbitmq 插件方式實(shí)現(xiàn)延遲隊(duì)列、整合SpringBoot

    消息隊(duì)列-RabbitMQ:延遲隊(duì)列、rabbitmq 插件方式實(shí)現(xiàn)延遲隊(duì)列、整合SpringBoot

    1、延遲隊(duì)列概念 延時(shí)隊(duì)列內(nèi)部是有序的 , 最重要的特性 就體現(xiàn)在它的 延時(shí)屬性 上,延時(shí)隊(duì)列中的元素是希望在指定時(shí)間到了以后或之前取出和處理,簡(jiǎn)單來(lái)說(shuō), 延時(shí)隊(duì)列就是用來(lái)存放需要在指定時(shí)間被處理的元素的隊(duì)列。 延遲隊(duì)列使用場(chǎng)景: 訂單在十分鐘之內(nèi)未支付則

    2024年02月22日
    瀏覽(20)
  • RabbitMQ實(shí)現(xiàn)延遲消息

    RabbitMQ實(shí)現(xiàn)延遲消息

    1,基于死信隊(duì)列 2,集成延遲插件 使用RabbitMQ來(lái)實(shí)現(xiàn)延遲消息必須先了解RabbitMQ的兩個(gè)概念:消息的TTL和死信Exchange,通過(guò)這兩者的組合來(lái)實(shí)現(xiàn)延遲隊(duì)列 消息的TTL就是消息的存活時(shí)間。RabbitMQ可以對(duì)隊(duì)列和消息分別設(shè)置TTL。對(duì)隊(duì)列設(shè)置就是隊(duì)列沒(méi)有消費(fèi)者連著的保留時(shí)間,也可

    2024年02月12日
    瀏覽(22)
  • Rabbitmq延遲消息

    Rabbitmq延遲消息

    延遲消息有兩種實(shí)現(xiàn)方案: 1,基于死信隊(duì)列 2,集成延遲插件 使用RabbitMQ來(lái)實(shí)現(xiàn)延遲消息必須先了解RabbitMQ的兩個(gè)概念: 消息的TTL(存活時(shí)間)和死信交換機(jī)Exchange,通過(guò)這兩者的組合來(lái)實(shí)現(xiàn)延遲隊(duì)列 1.1 消息的TTL(Time To Live) 消息的TTL就是消息的存活時(shí)間。RabbitMQ可以對(duì)隊(duì)列和

    2024年02月13日
    瀏覽(18)
  • RabbitMQ-消息延遲

    RabbitMQ-消息延遲

    ????????一個(gè)隊(duì)列接收到的消息有過(guò)期時(shí)間,消息過(guò)期之后,如果配置有死信隊(duì)列,消息就會(huì)進(jìn)去死信隊(duì)列。 ????????當(dāng)生產(chǎn)者將消息發(fā)送到exchange1,然后交換機(jī)將消息路由到隊(duì)列queue1,但是隊(duì)列queue1沒(méi)有消費(fèi)者,所以當(dāng)該隊(duì)列里面的值過(guò)期時(shí),就會(huì)將消息發(fā)送到死信

    2024年01月22日
    瀏覽(20)
  • RabbitMQ實(shí)現(xiàn)延時(shí)消息的兩種方法

    RabbitMQ實(shí)現(xiàn)延時(shí)消息的兩種方法

    1、死信隊(duì)列 1.1消息什么時(shí)候變?yōu)樗佬?dead-letter) 消息被否定接收,消費(fèi)者使用basic.reject 或者 basic.nack并且requeue 重回隊(duì)列屬性設(shè)為false。 消息在隊(duì)列里得時(shí)間超過(guò)了該消息設(shè)置的過(guò)期時(shí)間(TTL)。 消息隊(duì)列到達(dá)了它的最大長(zhǎng)度,之后再收到的消息。 1.2死信隊(duì)列的原理 當(dāng)一個(gè)

    2024年02月10日
    瀏覽(37)
  • RabbitMQ-同步和異步通訊、安裝和入門(mén)案例、SpringAMQP(5個(gè)消息發(fā)送接收Demo,jackson消息轉(zhuǎn)換器)

    RabbitMQ-同步和異步通訊、安裝和入門(mén)案例、SpringAMQP(5個(gè)消息發(fā)送接收Demo,jackson消息轉(zhuǎn)換器)

    微服務(wù)間通訊有同步和異步兩種方式: 同步通訊:就像打電話(huà),需要實(shí)時(shí)響應(yīng)。 異步通訊:就像發(fā)郵件,不需要馬上回復(fù)。 兩種方式各有優(yōu)劣,打電話(huà)可以立即得到響應(yīng),但是你卻不能跟多個(gè)人同時(shí)通話(huà)。發(fā)送郵件可以同時(shí)與多個(gè)人收發(fā)郵件,但是往往響應(yīng)會(huì)有延遲。 1.

    2024年02月11日
    瀏覽(16)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包