Spring Boot集成RabbitMQ

Spring Boot集成RabbitMQ_第1张图片
timg.jpg
  1. 安装
    下面是有Windows和Linux不同系统下的详细安装步骤,这了不再做介绍
    安装步骤

    这里需要注意RabbitMQ默认服务的端口是5672,管理RabbitMQ的WEBUI默认端口为15672。

  2. AMQP

    即Advanced Message Queuing Protocol,一个提供统一消息服务的应用 层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间 件设计。基于此协议的客户端与消息中间件可传递消息

    以上是百度百科的介绍,
    AMQP主要是为解耦,生产者不用知道接收者是谁,同理,接收者也不用知道生产者是谁,可靠,安全。

  3. RabbitMQ
    是AMQP中的一个开源的实现。使用Erlang语言开发,所以我安装RabbitMQ需要配置Erlang环境,

  • 为什么使用RabbitMQ

    Spring Boot集成RabbitMQ_第2张图片
    20170816171523564.jpg

    综合选择RabbitMQ

  1. 原理
    消息队列一般有三个概念:

    • 生产者
    • 队列
    • 消费者
      顾名思义相信大家都可以理解
      而RabbitMQ在此基础上添加了一层交换器抽象层,
      当你想要将消息投递到队列时,你通过把消息发送给交换器来完成。然后,根据确定的规则,RabbitMQ将会决定消息该投递到哪个队列,这些规则被称为路由键(routing key)。队列通过路由键绑定到交换器,当你把消息发送到代理服务器时,消息将拥有一个路由键(即使是空的)
      Rabbit也会将其和绑定使用的路由键进行匹配,如果匹配的话,那么消息将会投递到队列,如果路由的消息不匹配任何绑定模式的话,消息将进入“黑洞”
    Spring Boot集成RabbitMQ_第3张图片
    RabbitMQ运行原理.png
  2. 交换器有四种类型

  • Direct: 先匹配,在投送,
  • Topic: 按照特定的规则匹配
  • Headers: 按照自定义规则匹配
  • Fanout: 全部队列匹配

实操上代码

  1. AMQP依赖包
  
            org.springframework.boot
            spring-boot-starter-amqp
        

  1. application.properties中配置
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
  1. 队列配置
@Configuration
public class RabbitConfig {
    @Bean
    public Queue aQueue(){
        return new Queue("hello");
    }
    @Bean
    public Queue bQueue(){
        return new Queue("helloB");
    }

}

多个队列在此列中照例加就可以

  1. 消息生产者
@Component
public class HelloSender {

      //Spring boot 提供的默认实现
    @Autowired
    private AmqpTemplate amqpTemplate;

    public void send() {
        String context = "hello" + new Date();
        System.out.println("sender: " + context);
        //使用默认实现发送消息
        this.amqpTemplate.convertAndSend("hello", context);
    }

}
  1. 接收者
@Component
@RabbitListener(queues = "hello")
public class HelloRec {

    @RabbitHandler
    public void process(String hello){
        System.out.println("rec:" + hello);
    }

}
  1. 测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class BootRabbitmqApplicationTests {

    @Autowired
    private HelloSender helloSender;

    @Test
    public void contextLoads() {
        helloSender.send();
    }

}

注意:

Spring Boot集成RabbitMQ_第4张图片
QQ截图20170919231013.png

参考资料

  • RabbitMQ-理解消息通信-交换器和绑定
  • RabbitMQ安装教程(Windows/Linux都有)
  • RabbitMQ详解

你可能感兴趣的:(Spring Boot集成RabbitMQ)