前言
相信进来的同学之前或多或少都知道一点rabbitmq
本篇博客的意图就是教会大家如何去安装,以及如何在spring下使用rabbitmq
基本概念
来了解下RabbitMQ的成员组件:
broker:消息队列服务器的实体,是一个中间件应用,负责接收生产者的消息,然后将消息发送到消息接受者或者其他broker
exchange:消息交换机,是消息到达的第一个地方,消息通过它指定的路由规则,分发到不同的消息队列中
queue:消息队列,消息通过发送和路由之后最后到达的地方,到达queue的消息即进入逻辑上的等待消费状态。每个消息都会被发送到一个或者多个队列
binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来,也就是exchange和queue之间的虚拟连接
virtual host:虚拟主机,他是对broker的虚拟划分,将消费者、生产者和他们依赖的AMQP相关结构进行隔离,一般都是为了安全考虑,比如我们在一个broker中设置多个虚拟主机,对不同用户进行权限的分离
routing key:路由关键字,exchange根据这个关键字进行消息的投递
connection:连接,代表生产者、消费者、broker之间进行通信的物理网络
channel:消息通道,用于连接生产者和消费者的逻辑结构。在客户端的每个链接里,可可建立多个channel,每个channel代表一个会话任务,通过channel可以隔离连接中的不同交互内容
看下客户端使用rabbitmq的基本流程:
1.消费者连接到消息队列服务器,打开一个channel
2.消费者声明一个exchange,并设置相关属性
3.消费者声明一个queue,并设置相关属性
4.消费者使用routing key,在exchange和queue之间建立绑定
5.生产者投递消息到exchange
6.exchange接收到消息后,根据消息的key和已经设置好的binding,进行消息路由,将消息投递到一个或者多个queue里
安装
rabbitmq是基于erlang实现的,所以在安装rabbitmq之前需要安装erlang
以下都是在centos上进行
博主的erlang版本:erlang-19.0.4-1.el6.x86_64
rabbitmq版本:rabbitmq-server-3.6.10-1.el6.noarch
erlang的安装:
去erlang下载页面下载自己的erlang版本
下载之后 tar zxvf
解压
cd
到解压文件夹
执行./configure --prefix=/erlang
命令(保证在系统根目录下存在空erlang文件夹)
安装erlang:make && make install
修改系统环境变量etc/profile
,记得source执行
rabbitmq的安装:
去rabbitmq下载页面下载自己的rabbitmq版本
编译且安装:
rpm --import http://www.rabbitmq.com/rabbitmq-signing-key-public.asc
yum install rabbitmq-server-3.6.0-1.noarch.rpm
命令行使用
查看rabbitmq的安装目录:whereis rabbitmq
cd
到rabbitmq根目录下的sbin文件夹下
后台开启rabbitmq:./rabbitmq-server start -detached
关闭:./rabbitmqctl stop
查看交换机、绑定、队列:
./rabbitmqctl list_exchanges
./rabbitmqctl list_bindings
./rabbitmqctl list_queues
用户管理:(以下操作生效需要重启rabbitmq)
新建用户:./rabbitmqctl add_user username password
删除用户:./rabbitmqctl delete_user username
改密码:./rabbimqctl change_password username newpassword
设置用户角色:./rabbitmqctl set_user_tags username tag
(Tag可以为 administrator,monitoring, management)
开启web管理界面:./rabbitmq-plugins enable rabbitmq_management
(在浏览器地址栏输入:http://127.0.0.1:15672进入)
结合Spring的项目开发
spring和rabbitmq早已整合
接下来博主带大家熟悉如何在spring下使用rabbitmq
首先加入maven依赖:
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
</dependency>
编写RabbitConfig类与rabbitmq进行连接:
@Configuration
public class RabbitConfig {
@Bean
public ConnectionFactory connectionFactory() {
CachingConnectionFactory connectionFactory = new CachingConnectionFactory("106.15.205.155");
connectionFactory.setUsername("guest");
connectionFactory.setPassword("guest");
connectionFactory.setPort(5672);
return connectionFactory;
}
}
rabbitmq有很多种模式,博主觉得最常用的还是直连交换机模式(Direct)
编写DirectExchangeConfig配置生成direct交换模式:
//direct直连模式的交换机配置
@Configuration
public class DirectExchangeConfig {
//直连交换机
@Bean
public DirectExchange directExchange(){
return new DirectExchange("direct");
}
//添加两个队列
@Bean
public Queue queue1(){
return new Queue("queue1");
}
@Bean
public Queue queue2(){
return new Queue("queue2");
}
//三个binding将交换机和队列绑定起来
@Bean
public Binding binding1(){
return BindingBuilder.bind(queue1()).to(directExchange()).with("key1");
}
@Bean
public Binding binding2(){
return BindingBuilder.bind(queue2()).to(directExchange()).with("key2");
}
@Bean
public Binding binding3(){
return BindingBuilder.bind(queue2()).to(directExchange()).with("key3");
}
}
编写一个消息发布者(Sender):
@Service("sender")
public class Sender {
@Autowired
RabbitTemplate rabbitTemplate;
//direct直连交换机模式
public void send(String routingKey,String message){
rabbitTemplate.convertAndSend("direct",routingKey,message); //第一个值是交换机名 第二个值是routingkey,第三个是内容
}
}
最后使用controller测试:
@RestController
public class RabbitmqController {
@Autowired
Sender sender;
@RequestMapping("/rabbitmq")
public String test(){
try {
sender.send("key1","Hello World!");
return "success";
}catch (Exception e){
return "error";
}
}
}
我们来看下运行结果:
进入rabbitmq的web管理器:
可以看到,我们的消息已经成功发送到了指定队列中
以上便是RabbitMQ的安装和基本使用,谢谢阅读!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。