activeMQ消息队列JmsMessagingTemplate发送消息如何添加事务

      JmsMessagingTemplate发送消息添加事务是非常简单的,只需要在你要添加事务的类上添加注解@Transactional,没错就是和普通添加事务一样,但是注意下,你的activeMQ的config配置文件中一定要添加Jms事务管理器否则事务是不生效的。
      1、activeMQ中config中添加JMS事务管理器如下图所示:

@Component
@EnableJms
public class ActiveConfig {

	@Bean
    public Queue queue() {
        // 将该队列装在到Spring容器
        return new ActiveMQQueue("TEST");
    }

    /**
     * 添加Jms事务管理器
     */
    @Bean
    public PlatformTransactionManager createTransactionManager(ConnectionFactory connectionFactory) {

        return new JmsTransactionManager(connectionFactory);
    }
}

      2、类中添加事务注解代码如下所示:

	@Transactional
    public SingleResponse<OrderDTO> addOrder(OrderAddDTO orderAddDTO) throws JMSException {

        //保证幂等性
        String key = "order:addOrderSubmitNo:" + orderAddDTO.getSubmitNo();
        String value = RandomUtils.number(8);
        Boolean isSubmit = redisTemplate.opsForValue().setIfAbsent(key, value, 10, TimeUnit.MINUTES);
        if (!isSubmit) {
            return SingleResponse.buildFailure("error", "该笔订单已经提交,禁止再次提交!");
        }

        String orderSn = "orderSn_" + SequenceUtil.getSequence();

        //在order表中增加数据
        OrderDO orderDO = this.insertOrder(orderSn, orderAddDTO);
        Long orderId = orderDO.getId();

        //将消息传递给MQ

        //传统的发送至消息队列
        //this.sendMQ(orderAddDTO, orderSn, orderDO);
        this.sendPoolMQ(orderAddDTO, orderSn, orderDO);

        //在orderItem中增加数据
        this.addOrderItem(orderId, orderSn, orderAddDTO);

        OrderDTO orderDTO = new OrderDTO();
        BeanUtils.copyProperties(orderDO, orderDTO);
        return SingleResponse.of(orderDTO);
    }
  
  	private void sendPoolMQ(OrderAddDTO orderAddDTO, String orderSn, OrderDO orderDO) throws JMSException {

        ActiveMQMapMessage activeMQMapMessage = new ActiveMQMapMessage();
        activeMQMapMessage.setString("order_sn", orderSn);
        activeMQMapMessage.setString("order_id", String.valueOf(orderDO.getId()));

        jmsMessagingTemplate.convertAndSend("POOL_ORDER_ADD_ORDER_QUEUE", activeMQMapMessage);
    }

在这里插入图片描述      好了,添加事务控制就是那么简单,希望能帮到大家。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

岭岭颖颖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值