一、安装与配置
这里是基于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