相信进来的同窗以前或多或少都知道一点rabbitmq
本篇博客的意图就是教会你们如何去安装,以及如何在spring下使用rabbitmqhtml
来了解下RabbitMQ的成员组件:web
broker:消息队列服务器的实体,是一个中间件应用,负责接收生产者的消息,而后将消息发送到消息接受者或者其余brokerspring
exchange:消息交换机,是消息到达的第一个地方,消息经过它指定的路由规则,分发到不一样的消息队列中centos
queue:消息队列,消息经过发送和路由以后最后到达的地方,到达queue的消息即进入逻辑上的等待消费状态。每一个消息都会被发送到一个或者多个队列浏览器
binding:绑定,它的做用就是把exchange和queue按照路由规则绑定起来,也就是exchange和queue之间的虚拟链接安全
virtual host:虚拟主机,他是对broker的虚拟划分,将消费者、生产者和他们依赖的AMQP相关结构进行隔离,通常都是为了安全考虑,好比咱们在一个broker中设置多个虚拟主机,对不一样用户进行权限的分离服务器
routing key:路由关键字,exchange根据这个关键字进行消息的投递网络
connection:链接,表明生产者、消费者、broker之间进行通讯的物理网络app
channel:消息通道,用于链接生产者和消费者的逻辑结构。在客户端的每一个连接里,可可创建多个channel,每一个channel表明一个会话任务,经过channel能够隔离链接中的不一样交互内容maven
看下客户端使用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和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的安装和基本使用,谢谢阅读!