mq springboot接收和发送

本文详细介绍了如何在Java应用中配置RabbitMQ消息队列,并展示了消息发送与接收的具体实现,包括监听器的设置、消息转换及手动确认机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

config

@Slf4j
@Configuration
public class RabbitMqConfig {
 @Bean(name = "simpleRabbitListenerContainerFactory")
    public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory(ConnectionFactory connectionFactory) {
        SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
        factory.setConnectionFactory(connectionFactory);
        //new Jackson2JsonMessageConverter()
        factory.setMessageConverter(new SimpleMessageConverter()); //建议根据头信息自己转换
        factory.setAcknowledgeMode(AcknowledgeMode.MANUAL);//签收模式,只跟接受者声明有关
        return factory;
    }
}

接收端:

@Slf4j
@Component
public class MqHandler {

    @Resource
    private IMyService myService;

    private void ack(Message message, Channel channel) {
        try {
            channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
        } catch (IOException e) {
            log.error("basicAck error", e);
        }
    }

    @RabbitHandler
    @RabbitListener(bindings = {@QueueBinding(value = @Queue(value = "${queue.name}", durable = "true"),
            exchange = @Exchange(value = "${exchange.name}", type = "${exchange.type}")
            , key = "${routing.key}")}, containerFactory = "simpleRabbitListenerContainerFactory")
    public void checkOut(Message message, Channel channel) {
        String body = new String(message.getBody(), StandardCharsets.UTF_8);
        log.info("mqinfo prop {} \n msg {} ", message.getMessageProperties(), body);
        try {
            ParamDto paramDto = JsonUtil.from(body, new TypeReference<MyDto>() {
            });
            RespResult respResult = myService.do(paramDto);
            log.info("mq result info {} ", JsonUtil.to(respResult));
        } catch (Exception ex) {
            log.error("mq checkIn error", ex);
        }
        this.ack(message, channel);
    }

发送端:

@Autowired
private RabbitTemplate rabbitTemplate;
rabbitTemplate.send("exchangeName", "routingKey"
        , MqMessage.getMessage(JsonUtil.to(Object.class)));

public static Message getMessage(String object) {
    return MessageBuilder.withBody(object.getBytes())
            .setContentType(MessageProperties.CONTENT_TYPE_JSON)
            .setContentEncoding(StandardCharsets.UTF_8.name())
            .setMessageId(UUID.randomUUID().toString())
            .build();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值