RabbitMQ介绍

RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。RabbitMQ主要是为了实现系统之间的双向解耦而实现的。当生产者大量产生数据时,消费者无法快速消费,那么需要一个中间层。保存这个数据。

AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。

RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

 

Rabbitmq 安装

http://www.rabbitmq.com

 

 

 

 

先安装erlang环境

 

直接下一步下一步安装完成

配置系统环境: 
新建一个系统变量:名称ERLANG_HOME,值为本机中erlang的安装目录。 
然后再在用户变量PATH中添加上%ERLANG_HOME%\bin; 

查看安装是否成功:cmd然后erl -version 

 

 

安装RabbitMQ

默认安装的RabbitMQ 监听端口是5672

下一步下一步完成

配置

激活 RabbitMQ's Management Plugin

使用RabbitMQ 管理插件,可以更好的可视化方式查看Rabbit MQ 服务器实例的状态。

进入安装目录D:\Program Files (x86)\RabbitMQ Server\rabbitmq_server-3.7.10\sbin

打开命令窗口:

输入指令激活插件:rabbitmq-plugins.bat enable rabbitmq_management

重启服务器:net stop RabbitMQ && net start RabbitMQ

关闭服务器:net stop RabbitMQ

启动服务器:net start RabbitMQ

登录验证

http://localhost:15672/#/

登陆默认 guest guest

 

 

springboot集成RabbitMQ

简单使用

1、配置pom包,主要是添加spring-boot-starter-amqp的支持

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

 

2、配置文件

配置rabbitmq的安装地址、端口以及账户信息

 

spring.application.name=spirng-boot-rabbitmq

spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

 

3、队列配置

 

package com.td.rabbitmq;

import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitConfig {
    @Bean
    public Queue Queue() {
        Queue queue = new Queue("hello");
        return queue;
    }
}

 

4、发送者

 rabbitTemplate是springboot 提供的默认实现

package com.td.rabbitmq;

import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.Date;
@Component
public class HelloSender {

    @Autowired
    private AmqpTemplate rabbitTemplate;

    public void send() {
        String context = "hello " + new Date();
        System.out.println("发送者Sender : " + context);
        this.rabbitTemplate.convertAndSend("hello", context);
    }
}

 5、接收者

package com.td.rabbitmq;

import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Component
@RabbitListener(queues = "hello")
public class HelloReceiver {

    @RabbitHandler
    public void process(String hello) {
        System.out.println("接收者Receiver  : " + hello);
    }

}

6、测试

package com.td.rabbitmq;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class RabbitmqApplicationTests {

    @Autowired
    private HelloSender helloSender;

    @Test
    public void hello() throws Exception {
        helloSender.send();
    }
}

先发送一条消息不接收

控制台发送一条消息

运行接收