//是一个运行器,注解了@RunWith就可以直接使用spring容器,直接使用@Test注解,不用启动spring容器 //SpringRunner 继承了SpringJUnit4ClassRunner,没有扩展任何功能;使用前者,名字简短而已。 @RunWith(SpringRunner.class) //是SpringBoot自1.4.0版本开始引入的一个用于测试的注解 //SpringBootTest.WebEnvironment.RANDOM_PORT经常和测试类中@LocalServerPort一起在注入属性时使用。会随机生成一个端口号 @SpringBootTest(classes = WorkstackApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class RabbitMqTests {
private static final Logger logger = LoggerFactory.getLogger(RabbitMqTests.class);
@Autowired private RabbitTemplate rabbitTemplate;
@Test public void testSendMessage() { logger.info("手动创建rabbitTemplate"); /** CachingConnectionFactory connectionFactory = new CachingConnectionFactory(); connectionFactory.setAddresses("127.0.0.1:5672"); connectionFactory.setUsername("admin"); connectionFactory.setPassword("adminadmin"); connectionFactory.setVirtualHost("/"); // 如果需要confirm则设置为true connectionFactory.setPublisherConfirms(true); RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory); //rabbitTemplate.setConfirmCallback(rabbitConfirmCallback);
rabbitTemplate.setMandatory(true); //rabbitTemplate.setReturnCallback(rabbitReturnCallback); //使用单独的发送连接,避免生产者由于各种原因阻塞而导致消费者同样阻塞 rabbitTemplate.setUsePublisherConnection(true); */ logger.info("消息发送:"); // rabbitTemplate.setChannelTransacted(false);
// rabbitTemplate.setChannelTransacted(true); // rabbitTemplate.send("", ); rabbitTemplate.setConfirmCallback((correlationData, ack, cause) -> { System.out.println(" ID:" + correlationData); if (ack) {//true表示消息发送成功 logger.info("消息发送成功"); } else { logger.info("消息发送失败:" + cause); } });
Map<String, Object> map = Maps.newHashMap(); map.put("key1","value1"); map.put("key2","value2"); rabbitTemplate.convertAndSend( null, "aa.message", "测试消息", msg -> { MessageProperties properties = msg.getMessageProperties(); properties.setDeliveryMode(MessageDeliveryMode.PERSISTENT); Map<String, Object> headers = msg.getMessageProperties().getHeaders(); headers.putAll(map); return msg; }, new CorrelationData(UUID.randomUUID().toString()) ); }
}