rabbitmq延时队列及基于插件的延时队列

本文详细介绍了如何在CentOS 7环境下安装和配置RabbitMQ,包括Erlang的安装、RabbitMQ的安装与启动,并展示了如何创建延时队列。通过代码实例展示了SpringBoot框架下延时队列的生产和消费,以及如何使用插件rabbitmq_delayed_message_exchange解决延时队列的时间偏差问题。最后,通过测试证明了插件能有效实现独立的延时消息消费。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、安装与配置

这里是基于centOS 7环境,对于centOS 7安装步骤,这里就不详细介绍了!
环境安装好之后,下载所需的安装包,这里用的是esl-erlang_21.0-1_centos_7_amd64.rpm、rabbitmq-server-3.7.7-1.el7.noarch.rpm、rabbitmq_delayed_message_exchange-3.8.0.ez
这里我已经准备好了,
下载地址:https://pan.baidu.com/s/1mhteup5q0gBQKNWOYj7XPw
提取码:wS1K

安装Erlang和rabbitmq具体步骤:

1.进到安装包目录,我这里文件存放在目录/usr/local/share/rabbitmq-jar-master下,查看文件

[ws@localhost ~]$ cd /usr/local/share/rabbitmq-jar-master
[ws@localhost rabbitmq-jar-master]$ ll
total 48056
-rw-r--r--. 1 root root 39630896 Sep  8 23:05 esl-erlang_21.0-1_centos_7_amd64.rpm
-rw-r--r--. 1 root root    43377 Sep  8 23:05 rabbitmq_delayed_message_exchange-3.8.0.ez
-rw-r--r--. 1 root root  9530998 Sep  8 23:05 rabbitmq-server-3.7.7-1.el7.noarch.rpm

2.安装Erlang,切换到root账户,通过su命令,输入管理员密码。rpm -ivh esl-erlang_21.0-1_centos_7_amd64.rpm --force --nodeps强制安装!通过erl命令查看是否成功安装。

[ws@localhost rabbitmq-jar-master]$ rpm -ivh esl-erlang_21.0-1_centos_7_amd64.rpm --force --nodeps
warning: esl-erlang_21.0-1_centos_7_amd64.rpm: Header V4 RSA/SHA1 Signature, key ID a14f4fca: NOKEY
error: can't create transaction lock on /var/lib/rpm/.rpm.lock (Permission denied)
[ws@localhost rabbitmq-jar-master]$ su
Password: 
[root@localhost rabbitmq-jar-master]# rpm -ivh esl-erlang_21.0-1_centos_7_amd64.rpm --force --nodeps
warning: esl-erlang_21.0-1_centos_7_amd64.rpm: Header V4 RSA/SHA1 Signature, key ID a14f4fca: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:esl-erlang-21.0-1                ################################# [100%]
Erlang OTP 21.0 installed
[root@localhost rabbitmq-jar-master]# erl
Erlang/OTP 21 [erts-10.0] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [hipe]

Eshell V10.0  (abort with ^G)
1> ;

3.安装rabbitmq

[root@localhost rabbitmq-jar-master]# rpm -ivh rabbitmq-server-3.7.7-1.el7.noarch.rpm --force --nodeps
warning: rabbitmq-server-3.7.7-1.el7.noarch.rpm: Header V4 RSA/SHA1 Signature, key ID 6026dfca: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:rabbitmq-server-3.7.7-1.el7      ################################# [100%]

4.关闭防火墙,禁止防火墙自启

[root@localhost rabbitmq-jar-master]# systemctl stop firewalld.service
[root@localhost rabbitmq-jar-master]# systemctl disable firewalld.service
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

5.启动rabbitmq服务,查看状态,设置开机自启

[root@localhost rabbitmq-jar-master]# service rabbitmq-server start
Redirecting to /bin/systemctl start rabbitmq-server.service
^Z
[2]+  Stopped                 service rabbitmq-server start
[root@localhost rabbitmq-jar-master]# service rabbitmq-server status
Redirecting to /bin/systemctl status rabbitmq-server.service
● rabbitmq-server.service - RabbitMQ broker
   Loaded: loaded (/usr/lib/systemd/system/rabbitmq-server.service; disabled; vendor preset: disabled)
   Active: activating (start) since Wed 2021-09-08 23:12:12 PDT; 1min 13s ago
 Main PID: 11463 (beam.smp)
    Tasks: 163
   CGroup: /system.slice/rabbitmq-server.service
           ├─11463 /usr/lib/erlang/erts-10.0/bin/beam.smp -W w -A 128 -MBas a...
           ├─11634 /usr/lib/erlang/erts-10.0/bin/epmd -daemon
           ├─11878 erl_child_setup 1024
           ├─11907 inet_gethost 4
           └─11908 inet_gethost 4

Sep 08 23:12:13 localhost.localdomain rabbitmq-server[11463]: ##  ##      Rab...
Sep 08 23:12:13 localhost.localdomain rabbitmq-server[11463]: ##########  Lic...
Sep 08 23:12:13 localhost.localdomain rabbitmq-server[11463]: ######  ##
Sep 08 23:12:13 localhost.localdomain rabbitmq-server[11463]: ##########  Log...
Sep 08 23:12:13 localhost.localdomain rabbitmq-server[11463]: /var/log/rabbit...
Sep 08 23:12:13 localhost.localdomain rabbitmq-server[11463]: Starting broker...
Sep 08 23:12:13 localhost.localdomain rabbitmq-server[11463]: systemd unit fo...
Sep 08 23:12:13 localhost.localdomain rabbitmq-server[11463]: Failed to start...
Sep 08 23:12:13 localhost.localdomain rabbitmq-server[11463]: systemd READY n...
Sep 08 23:12:13 localhost.localdomain rabbitmq-server[11463]: completed with ...
Hint: Some lines were ellipsized, use -l to show in full.
[root@localhost share]# systemctl enable rabbitmq-server.service

6.执行如下命令,启动rabbitmq中的插件管理

[root@localhost share]# rabbitmq-plugins enable rabbitmq_management
The following plugins have been configured:
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_web_dispatch
Applying plugin configuration to rabbit@localhost...
The following plugins have been enabled:
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_web_dispatch

started 3 plugins.

7.添加用户,设置权限

[root@localhost share]# rabbitmqctl add_user ws ws1999
Adding user "ws" ...
[root@localhost share]# rabbitmqctl set_user_tags ws administrator
Setting tags for user "ws" to [administrator] ...
[root@localhost share]# rabbitmqctl set_permissions -p "/" ws ".*" ".*" ".*"
Setting permissions for user "ws" in vhost "/" ...
[root@localhost share]# rabbitmqctl list_users
Listing users ...
ws	[administrator]
guest	[administrator]

8.启动rabbitmq服务,登录后台管理页面,(rabbitmq服务器ip:15672),本机输入localhost:15672

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
到此,rabbitmq就安装完成了。。。

二、代码实现

结合springboot框架举例:
(1)yml配置

server:
  port: 8021
spring:
  #给项目来个名字
  application:
    name: rabbitmq-provider
  #配置rabbitMq 服务器
  rabbitmq:
    host: 192.168.145.131   #rabbitmq服务器ip地址,通过ifconfig命令查看
    port: 5672
    username: ws
    password: ws1999
    publisher-returns: true   #消息失败返回
#        auto-startup: true
      #开启ACK消息确认
#    listener:
#      direct:
#        acknowledge-mode: manual      #   NONE:自动确认。   AUTO:根据情况确认。   MANUAL:手动确认
#      simple:
#          acknowledge-mode: manual      #   NONE:自动确认。   AUTO:根据情况确认。   MANUAL:手动确认

(2)消息实体类

import lombok.Data;

import java.time.LocalDateTime;

/**
 * @ClassName MessagePojo
 * @Description TODO
 * @Author wangshuai
 * @Date 2021/9/9 10:03
 * @Version 1.0
 **/
@Data
public class MessagePojo {
   
    private String messageId;
    private String className;
    private LocalDateTime createTime;
    private Integer delay;
}

(3)交换机、队列、路由配置类

import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @ClassName RabbitMqConfiguration
 * @Description TODO
 * @Author wangshuai
 * @Date 2021/9/9 10:02
 * @Version 1.0
 **/
@Configuration
public class RabbitMqConfiguration {
   

    /**
     * ttl(延时)消息交换机名称
     */
    public static final String ORDER_TTL_EXCHANGE = "order.ttl.exchange";

    /**
     * ttl(延时)路由key
     */
    public static final String ORDER_TTL_ROUTINGKEY = "order.ttl.routingkey";

    /**
     * ttl(延时)消息队列名称
     */
    public static final String ORDER_TTL_QUEUE = "order.ttl.queue";


    /**
     * 消息二次转发的路由key
     */
    public static 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值