一、添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
二、在yml文件配置环境参数
spring:
activemq:
broker-url: ${MQ_BROKER-URL:tcp://192.168.1.14:61616} # Activemq Broker 的地址
user: ${MQ_USER:admin}
password: ${MQ_PASSWORD:admin}
packages:
trust-all: true # 可信任的反序列化包
三、添加Jms配置类
@Configuration
@EnableJms
public class JmsConfiguration{
private Logger logger = LoggerFactory.getLogger(getClass());
public static final String CLUSTERING_JMS_LISTENER_CONTAINER_FACTORY_BEAN_NAME = "clusteringJmsListenerContainerFactory";
/**
* 集群
* @param connectionFactory
* @return
*/
@Bean
JmsTemplate jmsTemplate(@Qualifier("jmsConnectionFactory") ConnectionFactory connectionFactory) {
JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory);
jmsTemplate.setPriority(999);
return jmsTemplate;
}
@Bean(value="jmsMessagingTemplate")
JmsMessagingTemplate jmsMessagingTemplate(@Qualifier("jmsConnectionFactory") ConnectionFactory connectionFactory) {
JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory);
jmsTemplate.setPubSubDomain(false);
JmsMessagingTemplate messagingTemplate = new JmsMessagingTemplate(jmsTemplate(connectionFactory));
// messagingTemplate.setJmsMessageConverter(defaultJmsMessageConverter());
return messagingTemplate;
}
@Bean(CLUSTERING_JMS_LISTENER_CONTAINER_FACTORY_BEAN_NAME)
public DefaultJmsListenerContainerFactory clusteringJmsListenerContainerFactory(
DefaultJmsListenerContainerFactoryConfigurer configurer, @Qualifier("jmsConnectionFactory") ConnectionFactory connectionFactory) {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
configurer.configure(factory, connectionFactory);
factory.setPubSubDomain(false);
return factory;
}
/**
* 消息转换器
* @return
*/
@Bean
public MessageConverter jacksonJmsMessageConverter() {
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
converter.setTargetType(MessageType.TEXT);
converter.setTypeIdPropertyName("_type");
return converter;
}
}
四、发送消息
(1)使用JmsTemplate 发送延迟消息
@Autowired
private JmsTemplate jmsTemplate;
public void sendMsg(){
jmsTemplate.convertAndSend("queue_name", JSON.toJSONString(orderHouseStatusDTO), message -> {
message.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, 72*60*60*1000);
return message;
});
}
(2)使用JmsMessagingTemplate 发送延迟消息
@Autowired
private JmsMessagingTemplate jmsTemplate;
public void sendMessage(Object message ) {
//给延迟队列发送消息
Map<String, Object> headers = headers = new HashMap<>(2);
headers.put(ScheduledMessage.AMQ_SCHEDULED_DELAY, delayTimes);
jmsTemplate.convertAndSend("queue_name", message, headers);
}