RabbitMQ的安装以及使用

前言

MQ,消息队列,排队处理消息。以下为如何离线安装rabbitMQ

一、Linux安装rabbitMQ

1、前提

(1)mq以及erlang下载地址: https://www.rabbitmq.com/install-rpm.html#downloads ,有四个,选择第一个即可。我这里选择的是3.6.6版本。

(2)rabbitMQ是用erlang语言写的,需要先安装erlang

(3)在 /user/local/ 下新建文件夹rabbitMQ,将两个安装包复制到这里。

2、安装erlang

(1)在rabbitMQ文件夹下,安装erlang

rpm -ivh erlang-19.0.4-1.el7.centos.x86_64.rpm

(2)验证是否安装成功

3、安装rabbitMQ

(1)安装

rpm -ivh rabbitmq-server-3.6.6-1.el7.noarch.rpm

(2)如果提示依赖检测失败,安装socat 

yum install socat

(3)再次安装rabbitMQ

rpm -ivh rabbitmq-server-3.6.6-1.el7.noarch.rpm

二、配置

1、开启服务和查看状态

service rabbitmq-server stop #关闭
service rabbitmq-server start #启动
service rabbitmq-server status #状态

2、添加用户 admin、用户授权

(1)添加用户、授权

rabbitmqctl add_user admin admin
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"

(2)查询用户

rabbitmqctl list_users

(3)查询用户权限

rabbitmqctl list_permissions -p /

3、开启远程访问

修改配置文件 /etc/rabbitmq/rabbitmq.config

进入 /etc/rabbitmq/  没有rabbitmq.config

直接新建编辑 vi rabbitmq.config

 

rabbitmq.config里添加以下配置

[

    {rabbit,

        [

            {tcp_listeners, [5672]},

            {loopback_users, ["admin"]}

        ]

    }

].

4、开启web管理界面

(1)开启web管理界面

rabbitmq-plugins enable rabbitmq_management

(2)开放5672(代码访问端口)和15672(web页面端口)端口

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

5、浏览器访问

ip:15672 例如: 192.168.1.206:15672

输入添加的用户名和密码登录

三、springboot结合rabbitMQ

1、添加依赖

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

2、application.properties里配置

spring.rabbitmq.host=192.168.1.102
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=admin
spring.rabbitmq.virtual-host=/
spring.rabbitmq.connection-timeout=15000
#采用消息确认模式,消息发出去后,异步等待响应
spring.rabbitmq.publisher-confirms=true
spring.rabbitmq.publisher-returns=true
spring.rabbitmq.template.mandatory=true

#消费端配置
#消费者监听并发数
spring.rabbitmq.listener.simple.concurrency=10
#最大并发数
spring.rabbitmq.listener.simple.max-concurrency=20
#签收模式  推荐使用manual手工签收
spring.rabbitmq.listener.simple.acknowledge-mode=manual
#限流,每次消费一条,完事再取
spring.rabbitmq.listener.simple.prefetch=5

3、配置类

创建RabbitMQ的配置类 RabbitConfig,用来配置队列、交换器、路由等高级信息。这里我们以入门为主,先以最小化的配置来定义,以完成一个基本的生产和消费过程。

4、生产者

通过注入 AmqpTemplate接口的实例来实现消息的发送, AmqpTemplate接口定义了一套针对AMQP协议的基础操作。在Spring Boot中会根据配置来注入其具体实现。在该生产者,我们会产生一个字符串,并发送到名为 hello的队列中。

5、消费者

通过 @RabbitListener注解定义该类对 hello队列的监听,并用 @RabbitHandler注解来指定对消息的处理方法。所以,该消费者实现了对 hello队列的消费,消费操作为输出消息的字符串内容。

6、测试

(1)创建测试类

(2)启动应用主类

从控制台中,我们看到如下内容,程序创建了一个访问 127.0.0.1:5672的连接。

(3)运行测试类

运行单元测试类,我们可以看到控制台中输出下面的内容,消息被发送到了RabbitMQ Server的 hello队列中。

(4)查看应用主类的控制台

切换到应用主类的控制台,我们可以看到类似如下输出,消费者对 hello队列的监听程序执行了,并输出了接受到的消息信息。

四、使用模式

1、单生产者,多消费者(秒杀,抢红包)

(1)配置

(2)生产者

(3)消费者

(4)controller

打印结果:

生产者发送了十条消息,分别被两个消费者消费了

2、发布订阅

(1)配置类

(2)生产者

(3)消费者

(4)controller

(5)打印结果

由以上结果可知:就算fanoutSender发送消息的时候,指定了routing_key为"abcd.ee",但是所有接收者都接受到了消息

3、topic

(1)配置类

(2)生产者

(3)消费者

(4)controller

(5)打印结果

由以上结果可知:sender1发送的消息,routing_key是“topic.message”,所以exchange里面的绑定的binding_key是“topic.message”,topic.#都符合路由规则,所以sender1发送的消息,两个队列都能接收到;

sender2发送的消息,routing_key是“topic.messages”,所以exchange里面的绑定的binding_key只有topic.#都符合路由规则;所以sender2发送的消息只有队列topic.messages能收到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值