ActiveMQ实现延迟队列,JmsMessagingTemplate 实现方式

需要的maven。

<!--MQ-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<!--消息队列连接池-->
<dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>activemq-pool</artifactId>
    <version>${version-activemq-pool}</version>
</dependency>

创建一个队列

@Configuration
public class ActiveMQProducerConfig {


    ///=======队列相关代码=========



    /**
     * 创建一个和前端交互的队列 一对一
     * @return
     */
    @Bean
    public Queue webQueue(){
        return new ActiveMQQueue(MqMsgEnum.QUEUE_WEB.getCode());
    }

关键代码,发送这里的。

@Service
public class ProducerQueueService {

    @Autowired
    private Queue defaultQueue;
    @Autowired
    private Queue webQueue;
    /**
     * jms消息模板
     */
    @Autowired
    private JmsMessagingTemplate jmsMessagingTemplate;


    /**
     * 发送延迟消息队列
     * @param msg 发送的信息
     */
    public void sendDelayQueueMsg(String msg){

        Map<String, Object> headers = new HashMap<>();
        //发送延迟队列,延迟10,单位毫秒
        headers.put(ScheduledMessage.AMQ_SCHEDULED_DELAY, 10000);
        jmsMessagingTemplate.convertAndSend(webQueue, msg, headers);

        System.out.println("发送了延迟队列!");
    }


}

消费端的和普通的一样。

注意,还要开启mq相关的配置。

发送延时消息需要修改 ActiveMQ 安装目录下的 conf/activemq.xml 文件。

打开 activemq.xml 文件,找到 <broker> 标签,在 <broker> 标签里面增加一个属性 schedulerSupport="true" 。如下所示:

 <broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}"
         schedulerSupport="true">
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章