paulwong

          Springboot ActiveMQ jmsTemplate配置

          @Configuration
          @DependsOn(value="cachingConnectionFactory")
          public class JmsTemplateConfiguration {

          @Value("${wechat.sendmessage.queue}")
          private String queueName;

          @Value("${wechat.sendmessage.topic}")
          private String topicName;

          @Value("${spring.jms.pub-sub-domain}")
          private boolean isPubSubDomain;


          /**
           * 定義點(diǎn)對點(diǎn)隊(duì)列
           * 
          @return
           
          */
          @Bean
          public Queue queue() {
              return new ActiveMQQueue(queueName);
          }



          /**
           * 定義一個(gè)主題
           * 
          @return
           
          */
          @Bean
          public Topic topic() {
              return new ActiveMQTopic(topicName);
          }

          private final ObjectProvider<DestinationResolver> destinationResolver;
          private final ObjectProvider<MessageConverter> messageConverter;
          private final CachingConnectionFactory cachingConnectionFactory;

          @Autowired
          public JmsTemplateConfiguration(ObjectProvider<DestinationResolver> destinationResolver,
                                          ObjectProvider<MessageConverter> messageConverter,
                                          CachingConnectionFactory cachingConnectionFactory) {
              this.destinationResolver = destinationResolver;
              this.messageConverter = messageConverter;
              this.cachingConnectionFactory = cachingConnectionFactory;
          }

          /**
           * 配置隊(duì)列生產(chǎn)者的JmsTemplate
           * 
          @return JmsTemplate
           
          */
          @Bean(name="jmsQueueTemplate")
          public JmsTemplate jmsQueueTemplate() {
              //設(shè)置創(chuàng)建連接的工廠
              
          //JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory);
              
          //優(yōu)化連接工廠,這里應(yīng)用緩存池 連接工廠就即可
              JmsTemplate jmsTemplate = new JmsTemplate(cachingConnectionFactory);
              //設(shè)置默認(rèn)消費(fèi)topic
             
          //jmsTemplate.setDefaultDestination(topic());
              
          //設(shè)置P2P隊(duì)列消息類型
              jmsTemplate.setPubSubDomain(isPubSubDomain);

              DestinationResolver destinationResolver = (DestinationResolver) this.destinationResolver.getIfUnique();
              if (destinationResolver != null) {
                  jmsTemplate.setDestinationResolver(destinationResolver);
              }
              MessageConverter messageConverter = (MessageConverter) this.messageConverter.getIfUnique();
              if (messageConverter != null) {
                  jmsTemplate.setMessageConverter(messageConverter);
              }
              //deliveryMode, priority, timeToLive 的開關(guān),要生效,必須配置為true,默認(rèn)false
              jmsTemplate.setExplicitQosEnabled(true);
              //DeliveryMode.NON_PERSISTENT=1:非持久 ; DeliveryMode.PERSISTENT=2:持久
              
          //定義持久化后節(jié)點(diǎn)掛掉以后,重啟可以繼續(xù)消費(fèi).
              jmsTemplate.setDeliveryMode(DeliveryMode.PERSISTENT);
              //默認(rèn)不開啟事務(wù)
              System.out.println("默認(rèn)是否開啟事務(wù):"+jmsTemplate.isSessionTransacted());
              //如果不啟用事務(wù),則會導(dǎo)致XA事務(wù)失效;
              
          //作為生產(chǎn)者如果需要支持事務(wù),則需要配置SessionTransacted為true
            
          //jmsTemplate.setSessionTransacted(true);
              
          //消息的應(yīng)答方式,需要手動確認(rèn),此時(shí)SessionTransacted必須被設(shè)置為false,且為Session.CLIENT_ACKNOWLEDGE模式
              
          //Session.AUTO_ACKNOWLEDGE  消息自動簽收
              
          //Session.CLIENT_ACKNOWLEDGE  客戶端調(diào)用acknowledge方法手動簽收
              
          //Session.DUPS_OK_ACKNOWLEDGE 不必必須簽收,消息可能會重復(fù)發(fā)送
              jmsTemplate.setSessionAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE);
              return jmsTemplate;
          }

          /**
           * 配置發(fā)布訂閱生產(chǎn)者的JmsTemplate
           * 
          @return JmsTemplate
           
          */
          @Bean(name="jmsTopicTemplate")
          public JmsTemplate jmsTopicTemplate() {
              //設(shè)置創(chuàng)建連接的工廠
             
          //JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory);
              
          //優(yōu)化連接工廠,這里應(yīng)用緩存池 連接工廠就即可
              JmsTemplate jmsTemplate = new JmsTemplate(cachingConnectionFactory);
              //設(shè)置默認(rèn)消費(fèi)topic
            
          //jmsTemplate.setDefaultDestination(topic());
              
          //設(shè)置發(fā)布訂閱消息類型
              jmsTemplate.setPubSubDomain(isPubSubDomain);


              //deliveryMode, priority, timeToLive 的開關(guān),要生效,必須配置為true,默認(rèn)false
              jmsTemplate.setExplicitQosEnabled(true);
              //DeliveryMode.NON_PERSISTENT=1:非持久 ; DeliveryMode.PERSISTENT=2:持久
              jmsTemplate.setDeliveryMode(DeliveryMode.PERSISTENT);

              //默認(rèn)不開啟事務(wù)
              System.out.println("是否開啟事務(wù)"+jmsTemplate.isSessionTransacted());
              //如果session帶有事務(wù),并且事務(wù)成功提交,則消息被自動簽收。如果事務(wù)回滾,則消息會被再次傳送。
              
          //jmsTemplate.setSessionTransacted(true);

              
          //不帶事務(wù)的session的簽收方式,取決于session的配置。
              
          //默認(rèn)消息確認(rèn)方式為1,即AUTO_ACKNOWLEDGE
              System.out.println("是否消息確認(rèn)方式"+jmsTemplate.getSessionAcknowledgeMode());

              //消息的應(yīng)答方式,需要手動確認(rèn),此時(shí)SessionTransacted必須被設(shè)置為false,且為Session.CLIENT_ACKNOWLEDGE模式
              
          //Session.AUTO_ACKNOWLEDGE  消息自動簽收
              
          //Session.CLIENT_ACKNOWLEDGE  客戶端調(diào)用acknowledge方法手動簽收
              
          //Session.DUPS_OK_ACKNOWLEDGE 不必必須簽收,消息可能會重復(fù)發(fā)送
              jmsTemplate.setSessionAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE);

              return jmsTemplate;
          }

          }

          posted on 2019-07-24 11:40 paulwong 閱讀(2132) 評論(0)  編輯  收藏 所屬分類: JMS

          主站蜘蛛池模板: 景东| 清徐县| 凉城县| 灌阳县| 建湖县| 永修县| 遂溪县| 台中市| 定远县| 东城区| 绥化市| 永春县| 搜索| 吉林市| 新密市| 安陆市| 平原县| 东阳市| 常州市| 马公市| 札达县| 陇南市| 化州市| 鹤岗市| 旅游| 湘乡市| 乐亭县| 永德县| 诸城市| 六盘水市| 乐至县| 栖霞市| 台中市| 佳木斯市| 乌鲁木齐县| 大丰市| 瑞金市| 中山市| 始兴县| 兴海县| 左贡县|