//是一个运行器,注解了@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())
        );
    }

}

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐