/** * Copyright 2019-2999 the original author or authors. * <p> * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * <p> * http://www.apache.org/licenses/LICENSE-2.0 * <p> * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package io.mykit.delay.common.autoconfigigure; import io.mykit.delay.queue.activemq.ActiveMQSender; import io.mykit.delay.queue.activemq.ActiveMQSenderFactory; import io.mykit.delay.queue.activemq.QueueSender; import io.mykit.delay.queue.activemq.TopicSender; import org.apache.activemq.ActiveMQConnectionFactory; import org.apache.activemq.RedeliveryPolicy; import org.apache.activemq.pool.PooledConnectionFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jms.core.JmsTemplate; /** * @author liuyazhuang * @version 1.0.0 * @date 2019/6/12 * @description 配置ActiveMQ */ @Configuration @EnableConfigurationProperties(ActiveMQProperties.class) public class ActiveMQAutoConfiguration { @Autowired private ActiveMQProperties properties; @Bean public RedeliveryPolicy activeMQRedeliveryPolicy(){ RedeliveryPolicy policy = new RedeliveryPolicy(); policy.setUseExponentialBackOff(properties.isUseExponentialBackOff()); policy.setMaximumRedeliveries(properties.getMaximumRedeliveries()); policy.setInitialRedeliveryDelay(properties.getInitialRedeliveryDelay()); policy.setBackOffMultiplier(properties.getBackOffMultiplier()); policy.setMaximumRedeliveryDelay(properties.getMaximumRedeliveryDelay()); return policy; } @Bean public ActiveMQConnectionFactory activeMQConnectionFactory(){ ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(); activeMQConnectionFactory.setBrokerURL(properties.getBrokerUrl()); activeMQConnectionFactory.setUserName(properties.getUsername()); activeMQConnectionFactory.setPassword(properties.getPassword()); activeMQConnectionFactory.setUseAsyncSend(properties.isUseAsyncSend()); activeMQConnectionFactory.setRedeliveryPolicy(activeMQRedeliveryPolicy()); return activeMQConnectionFactory; } @Bean public PooledConnectionFactory connectionFactory(){ PooledConnectionFactory factory = new PooledConnectionFactory(); factory.setConnectionFactory(activeMQConnectionFactory()); return factory; } @Bean public JmsTemplate jmsQueueTemplate(){ JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory()); jmsTemplate.setPubSubDomain(properties.isQueue_pub_sub_domain()); return jmsTemplate; } @Bean public JmsTemplate jmsTopicTemplate(){ JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory()); jmsTemplate.setPubSubDomain(properties.isTopic_pub_sub_domain()); return jmsTemplate; } @Bean public ActiveMQSender queueSender(){ ActiveMQSender queueSender = new QueueSender(jmsQueueTemplate()); ActiveMQSenderFactory.put(ActiveMQSenderFactory.JMS_QUEUE_SENDER, queueSender); return queueSender; } @Bean public ActiveMQSender topicSender(){ ActiveMQSender topicSender = new TopicSender(jmsTopicTemplate()); ActiveMQSenderFactory.put(ActiveMQSenderFactory.JMS_TOPIC_SENDER, topicSender); return topicSender; } }