RabbitMQ的安装和使用

前言

相信进来的同窗以前或多或少都知道一点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的项目开发

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";
        }
    }

}

咱们来看下运行结果:

clipboard.png

进入rabbitmq的web管理器:

clipboard.png

能够看到,咱们的消息已经成功发送到了指定队列中

以上即是RabbitMQ的安装和基本使用,谢谢阅读!

相关文章
相关标签/搜索