SpringBoot中配置RabbitMQ

RabbitMQ介紹與原理見:消息隊列之 RabbitMQ

RabbitMQ安裝見:RabbitMQ安裝

依賴:


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

在Spring Boot中配置RabbitMQ比較簡單,首先配置yml文件,properties也可以。

application-rabbitmq.yml

spring:
  rabbitmq:
    host: 127.0.0.1
    port: 5672
    username: guest
    password: guest
    connection-timeout: 60s
    listener:
      direct:
        acknowledge-mode: none

RabbitMQ默認的ExChange消息類型是direct,而且不用自己配置交換機exchange、路由鍵routing-key及bind信息。發送消息amqpTemplate.convertAndSend(routingKey, data)時,將隊列名字作爲routing-key和消息一塊發送。在consumer監聽相應隊列即可。

編寫配置類RabbitMqOperator:

package com.qiqi.mq;

import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

/**
 * 消息隊列
 */
@Component
public class RabbitMqOperator {

    private AmqpTemplate amqpTemplate;

    @Autowired
    public RabbitMqOperator(AmqpTemplate amqpTemplate) {
        this.amqpTemplate = amqpTemplate;
    }

    /**
     * 異步發送字節數組到rabbitmq
     * @param data
     */
    public void push(String routingKey, byte[] data){
        amqpTemplate.convertAndSend(routingKey, data);
    }


    /**
     * 異步發送int類型消息到rabbitmq
     * @param data
     */
    public void pushInt(String routingKey, int data){
        amqpTemplate.convertAndSend(routingKey, data);
    }

    /**
     * 定義一個名爲:first_queue 的隊列
     * @return
     */
    @Bean
    public Queue firstQueue() {
        return new Queue("first_queue");
    }

    /**
     * 定義一個名爲:second_queue 的隊列
     * @return
     */
    @Bean
    public Queue secondQueue() {
        return new Queue("second_queue");
    }
}

生產者:

public class Productor{

    //消息隊列
    private RabbitMqOperator rabbitMqOperator;

    @Autowired
    public Productor(RabbitMqOperator operator) {
        this.rabbitMqOperator = operator;
        Assert.notNull(this.rabbitMqOperator, "rabbitmq init fail.");
    }

    /**
     * 數據發送到rabbitMq
     */
    public void sendData() {

        byte[] data = new byte[11];
       // data[10] = ;
        //發送數據到first_queue隊列
        rabbitMqOperator.push("first_queue" ,data);

        for (int i = 0; i < 100; i++){
            //發送數據到second_queue隊列
            rabbitMqOperator.pushInt("second_queue",i);
        }
    }
}

消費者:

package com.qiqi.mq;

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

/**
 * 消費者
 */
@Component
public class Consumer {

    private static final Logger log = LoggerFactory.getLogger(Consumer.class);

    /**
     * @RabbitHandler 指定消息的處理方法
     * @param message
     */
    @RabbitListener(queues = "first_queue")////@RabbitListener 監聽 first_queue 隊列
    @RabbitHandler
    public void process(String message) {
         //接收first_queue隊列消息
        log.info("接收的消息爲: {}", message);
    }

    @RabbitListener(queues = "second_queue")////@RabbitListener 監聽 second_queue 隊列
    @RabbitHandler
    public void process1(String message) {
         //接收second_queue隊列消息
        log.info("2接收的消息爲: {}", message);
    }
}

輸出例子:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章