SpringBoot整合ActiveMq消息队列

  • 导入依赖包

    public class ActiveMQUtil {
    
      PooledConnectionFactory pooledConnectionFactory = null;
    
      public  void init(String brokerUrl){
          ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(brokerUrl);
          pooledConnectionFactory = new PooledConnectionFactory(activeMQConnectionFactory);
          //设置超时时间
          pooledConnectionFactory.setExpiryTimeout(2000);
          // 设置出现异常的时候,继续重试连接
          pooledConnectionFactory.setReconnectOnException(true);
          // 设置最大连接数
          pooledConnectionFactory.setMaxConnections(5);
      }
      // 获取连接
      public Connection getConnection(){
          Connection connection = null;
          try {
              connection = pooledConnectionFactory.createConnection();
          } catch (JMSException e) {
              e.printStackTrace();
          }
          return  connection;
      }
    }
  • 写工具类

    public class ActiveMQUtil {
    
      PooledConnectionFactory pooledConnectionFactory = null;
    
      public  void init(String brokerUrl){
          ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(brokerUrl);
          pooledConnectionFactory = new PooledConnectionFactory(activeMQConnectionFactory);
          //设置超时时间
          pooledConnectionFactory.setExpiryTimeout(2000);
          // 设置出现异常的时候,继续重试连接
          pooledConnectionFactory.setReconnectOnException(true);
          // 设置最大连接数
          pooledConnectionFactory.setMaxConnections(5);
      }
      // 获取连接
      public Connection getConnection(){
          Connection connection = null;
          try {
              connection = pooledConnectionFactory.createConnection();
          } catch (JMSException e) {
              e.printStackTrace();
          }
          return  connection;
      }
    }
  • 写配置类,直接注解注入

    @Configuration
    public class ActiveMQConfig {
    
      @Value("${spring.activemq.broker-url:disabled}")
      String brokerURL ;
    
      @Value("${activemq.listener.enable:disabled}")
      String listenerEnable;
    
      // 获取activeMQUtil
      @Bean
      public ActiveMQUtil getActiveMQUtil(){
          if ("disabled".equals(brokerURL)){
              return null;
          }
          ActiveMQUtil activeMQUtil = new ActiveMQUtil();
          activeMQUtil.init(brokerURL);
          return  activeMQUtil;
      }
    
      @Bean(name = "jmsQueueListener")
      public DefaultJmsListenerContainerFactory jmsQueueListenerContainerFactory(ActiveMQConnectionFactory activeMQConnectionFactory) {
    
          if("disabled".equals(listenerEnable)){
              return null;
          }
          DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
          factory.setConnectionFactory(activeMQConnectionFactory);
          // 设置事务
          factory.setSessionTransacted(false);
          // 手动签收
          factory.setSessionAcknowledgeMode(Session.AUTO_ACKNOWLEDGE);
          // 设置并发数
          factory.setConcurrency("5");
          // 重连间隔时间
          factory.setRecoveryInterval(5000L);
          return factory;
      }
      // 接收消息
      @Bean
      public ActiveMQConnectionFactory activeMQConnectionFactory (){
          ActiveMQConnectionFactory activeMQConnectionFactory =
                  new ActiveMQConnectionFactory(brokerURL);
          return activeMQConnectionFactory;
      }
  • 发消息的controller:实现发送一个success及orderid的message到PAYMENT_TO_ORDER队列里面,***取到message,拿到里面的success

    @GetMapping("sendPayment")
      @ResponseBody
      public String sendPayment(String orderId){
    
          paymentInfoService.sendPaymentToOrder(orderId,"success");
          return "success";
      }
  • 发消息的service

     @Override
      public void sendPaymentToOrder(String orderId,String result) {
          Connection connection = activeMQUtil.getConnection();//建立连接
    
          try {
              Session session = connection.createSession(true, Session.SESSION_TRANSACTED);//创建会话
    
              MessageProducer producer = session.createProducer(session.createQueue("PAYMENT_TO_ORDER"));//定义队列名称
              MapMessage mapMessage = new ActiveMQMapMessage();
              mapMessage.setString("orderId",orderId);//订单编号
              mapMessage.setString("result",result);//结果
              producer.send(mapMessage);//发送消息
              session.commit();//提交会话
              connection.close();//关闭连接
    
          } catch (JMSException e) {
              e.printStackTrace();
          }
      }
  • 收消息的***

    @JmsListener(destination = "SKU_DEDUCT_QUEUE",containerFactory = "jmsQueueListener" )
      public  void  consumeWareDeduct(MapMessage mapMessage) throws JMSException {
          // 更新订单状态
          String orderId = mapMessage.getString("orderId");
          String status = mapMessage.getString("status");
          if("DEDUCTED".equals(status)){
              orderService.updateStatus(orderId,ProcessStatus.WAITING_DELEVER);
          }else{
              orderService.updateStatus(orderId,ProcessStatus.STOCK_EXCEPTION);
          }
      }
全部评论

相关推荐

不愿透露姓名的神秘牛友
05-20 16:14
已编辑
不止遇到一次了,什么都不会,让提合并请求,问什么是合并请求。让gitlab.页面把测试截图附上,不知道截图要放在哪,那么大的编辑看不到吗让配开发机,问ip是什么东西……这都咋进来的啊,我们(我2023年毕业)那会儿没AI的时候面试都是直接linux,docker,k8s,git,结构与算法,计网。怎么才过去2年,实习生跟傻子一样,有些问题问的我难受,不会git commit,不会git pull,不会切换分支,直接要覆盖master....————而且态度非常敷衍,3天前给开个仓库权限,连本地都没有拉下来。让写一个小文档,都是说一句,写一句,说把目录加上,挺嗤之以鼻,最后还是把目录加上了😂😂任何文档和注释都是方便后来人的,现在的人真的很自负啊,打开github看看任何一个开源项目的文档和注释,都写的很详细。难道现在的同学在校期间不经常拉开源项目看源码学习吗? 哪怕是一个swap函数,开源项目里都经常注释:1 3 5 7 9 2 4 6 8 10^           ^l              rswap:{功能描述}{使用样例}————给我气笑了,没次问我有什么任务的时候,我都是说,优先你学校导师的项目,然后再做公司需求。然后给了两个需求,一个月内搞定就行,既然是agent开发,1. 部署需要维护项目的开发环境2.阅读opencode/openclaude代码(我个人感觉龙虾的源码agent部分很常规,就一个channel+agent,还不如看claude泄露的代码和opencode)然后任务1搞了几周说因为环境问题,他申请到的远程开发机是linux,装的python2,项目是py3的,所以没搭建,我说你不行就用conda或docker把环境屏蔽了呢,没搭理我。任务2:看了很长时间代码,给我回了一句,opencode和openclaude是用go写的……我说你打开github看右下角那的语言是ts还是go…… 结果满脸懵的说ts是什么……我让看agent loop,哪怕全局搜索一下while(true),跳过去从头看到尾就大致清楚了,压根没看。————嘻嘻,我已经开始做社招简历了。
redf1sh:默认会git结果发现真不会,这种一看就是没做过项目的,真做过项目的至少会提交
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务