spring boot项目如何整合ActiveMQ发送延迟消息

一、添加依赖

       <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);
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值