- 操作步驟:
引入依賴包、配置連接參數、新建隊列、生產者代碼、消費者代碼
- 依賴包
<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
