SpringBoot集成RabbitMQ簡單舉例


  • 操作步驟:

引入依賴包、配置連接參數、新建隊列、生產者代碼、消費者代碼

 

  • 依賴包
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.amqp</groupId>
            <artifactId>spring-rabbit-test</artifactId>
            <scope>test</scope>
        </dependency>

 

  • 配置連接參數
spring.rabbitmq.enable=true
spring.rabbitmq.host=mq-test01.xxx.cn
spring.rabbitmq.port=5672
spring.rabbitmq.username=dms_test01
spring.rabbitmq.password=dms_test01
spring.rabbitmq.virtual-host=dms_test01

 

  • 新建隊列
import com.gxr.dmsData.common.Constants;
import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author :gongxr
 * @description:RabbitTemplate配置
 * @date :Created in 2021/7/1
 */
@Configuration
public class RabbitConfig {
    // exchange、Routing Key和queue都是一樣的
    String queueName = Constants.QUEUE_NAME;

    // 隊列名稱
    @Bean
    public Queue queue() {
        return new Queue(queueName, false);
    }

    // 交換機名
    @Bean
    FanoutExchange exchange() {
        return new FanoutExchange(queueName);
    }

    // 綁定:將隊列和交換機綁定
    @Bean
    Binding bindingExchange(Queue queue, FanoutExchange exchange) {
        return BindingBuilder.bind(queue).to(exchange);
    }

}

 

  • 生產者代碼
import com.gxr.dmsData.common.BaseTest;
import com.gxr.dmsData.common.Constants;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.Random;

/**
 * @author :gongxr
 * @description:rabbitMQ測試類
 * @date :Created in 2021/7/1
 */
@Slf4j
public class TestRabbitMQ extends BaseTest {
    /**
     * 引入依賴包、配置參數、配置RabbitConfig、測試代碼
     * 消費者監聽(RabbitMqListener)
     */
    // exchange、Routing Key和queue都是一樣的
    private String key = Constants.QUEUE_NAME;

    @Autowired
    RabbitTemplate rabbitTemplate;

    @Test
    public void testSender() {
        String createTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        HashMap<String, Object> map = new HashMap<>();
        map.put("name", "Tom");
        map.put("age", new Random().nextInt(100));
        map.put("createTime", createTime);
        rabbitTemplate.convertAndSend(key, null, map);
//        rabbitTemplate.convertAndSend(key, null, "String123");
        log.info("發送成功!");
    }
}

 

  • 消費者代碼
import com.alibaba.fastjson.JSON;
import com.gxr.dmsData.common.Constants;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.messaging.handler.annotation.Headers;
import org.springframework.messaging.handler.annotation.Payload;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
 * @author :gongxr
 * @description:RabbitMQ消費者消息接收監聽類(三種方法,推薦使用最后一種)
 * @date :Created in 2021/7/2
 */
@Slf4j
@Component
public class RabbitMqListener {
    //    @RabbitListener(queues = Constants.QUEUE_NAME) //監聽的隊列名稱 TestDirectQueue
    public void handler(Object o) {
        log.info("1、Rabbit消費:【{}】", o.toString());
    }

    //    @RabbitListener(queues = Constants.QUEUE_NAME)
    public void handler(Message message) {
        log.info("2、Rabbit消費,BODY:【{}】,PROPERTIES:【{}】", new String(message.getBody()), message.getMessageProperties().toString());
    }

    @RabbitListener(queues = Constants.QUEUE_NAME)
    public void handler(@Payload String body, @Headers Map<String, Object> headers) {
        log.info("3、Rabbit消費,BODY:【{}】,HEADER:【{}】", body, JSON.toJSONString(headers));
    }
}

 

來源項目:dms-test-data

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM