springboot 整合rabbitmq

198 阅读1分钟
//消息消费者
@Autowired
private RabbitTemplate rabbitTemplate;

@RabbitListener(bindings = {
        @QueueBinding(
		value = @Queue(name="test111", durable = "true", exclusive = "false"),
		exchange = @Exchange(type = "direct", name = "directexchange"),
		key = {"direct1"}
		    )
})
public void listener(String message, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long tag) throws IOException {
	try {
		TimeUnit.SECONDS.sleep(10);
	} catch (InterruptedException e) {
		e.printStackTrace();
	}
	System.out.println("接收到消息message1 = " + message + tag);
	channel.basicAck(tag, true);
}

//(配置qos和应答机制)(配置消息传递结果)
@Configuration
public class RabbitConfig {
    @Bean
    public RabbitListenerContainerFactory<?> rabbitListenerContainerFactory(ConnectionFactory connectionFactory) {
        SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
        factory.setConnectionFactory(connectionFactory);
        // 设置QOS,保证同一时间一个消费者只能消费一条消息
        factory.setPrefetchCount(1);
        //初始化消费者数量
//        factory.setConcurrentConsumers(1);
        //最大消费者数量
//        factory.setMaxConcurrentConsumers(1);
        // 设置应答模式
        factory.setAcknowledgeMode(AcknowledgeMode.MANUAL);

        return factory;
    }

    @Bean
    public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
        RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
        rabbitTemplate.setMandatory(true);
        // 队列返回消息(失败回调)
        rabbitTemplate.setReturnCallback(new RabbitTemplate.ReturnCallback() {
            @Override
            public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) {
                System.out.println("rabbit 消息发送失败" + message.toString() + "===" + replyText + "===" + exchange + "===" + routingKey);
            }
        });
        // 路由返回消息
        rabbitTemplate.setConfirmCallback((correlationData, ack, cause) -> {
            if (!ack) {
                System.out.println("rabbit 消息发送失败" + cause + correlationData.toString());
            } else {
                System.out.println("rabbit 消息发送成功 ");
            }
        });
        return rabbitTemplate;
    }

spring:
    rabbitmq:
      virtual-host: /
      username: guest
      password: guest
      host: 172.20.10.6
      port: 5672
      publisher-returns: true
      publisher-confirm: true
      publisher-confirm-type: correlated