4、springboot+ activemq|8月更文挑戰

這是我參與8月更文挑戰的第4天,活動詳情查看:8月更文挑戰java

 1.建立工程

file--> new -->project

spring initializr--> 選擇默認的  default  -->  next

填好項目信息 --> next 

到這裏項目就搭建完成了。web

打開 application.properties 文件 添加  spring.activemq.in-memory=true  spring.activemq.pool.enabled=falsespring

spring.activemq.in-memory=true
#是不是內存模式,默認爲true.
spring.activemq.pool.enabled=false
#是否建立PooledConnectionFactory,而非ConnectionFactory,默認false
複製代碼

#spring.activemq.broker-url=tcp://localhost:61616apache

#指定ActiveMQ broker的URL,默認自動生成. #spring.activemq.password#指定broker的密碼. #spring.activemq.user#指定broker的用戶.springboot

若是使用外部 mq 開啓broker-url  將in-memory設置爲falsemarkdown

  1. 生產者
import org.apache.activemq.command.ActiveMQQueue;
import org.apache.activemq.command.ActiveMQTopic;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.jms.MessageNotWriteableException;
import javax.jms.Queue;
import javax.jms.Topic;

/**
 * @author Yang
 * 描述:
 */
@RestController
public class Producer {

    @Autowired
    private JmsMessagingTemplate jmsMessagingTemplate;


    @RequestMapping("sendqueue")
    public void sendQueue(String msg) throws MessageNotWriteableException {
        final Queue queue = new ActiveMQQueue("queue");
        jmsMessagingTemplate.convertAndSend(queue, msg);

    }

    @RequestMapping("sendtopic")
    public void sendTopic(String msg) throws MessageNotWriteableException {
        final Topic topic = new ActiveMQTopic("topic");
        jmsMessagingTemplate.convertAndSend(topic, msg);

    }

    @JmsListener(destination = "returnmsg")

    public void returnmsg(String msg) {

        System.out.println("*********" + msg + "*************");
    }


}
複製代碼

2.消費者app

@JmsListener(destination="queue)  監聽dom

@SendTo("returnmsg"),該註解的意思是將return回的值,再發送的"returnmsg"隊列中tcp

import org.springframework.jms.annotation.JmsListener;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Component;

/**
 * @author Yang
 * 描述:
 */
@Component
public class Consumer {

    @JmsListener(destination = "queue")
    @SendTo("returnmsg")
    public String receiveQueue(String msg) {
        System.out.println("==============" + msg + "==================");
        return "老鐵我收到了"+msg;
    }

    @JmsListener(destination = "topic")
    @SendTo("returnmsg")
    public String receiveTopic(String msg){
        System.out.println("==topic=====" + msg + "=======topic====");
        return "topic"+msg;
    }

    @JmsListener(destination = "topic")
    public void receiveTopic2(String msg){
        System.out.println("==topic2=====" + msg + "=======topic2====");
    }
}
複製代碼

啓動時 添加@EnableJms    @EnableJms會啓動jms的註解掃描,至關於<jms:annotation-d riven/>oop

@SpringBootApplication
@EnableJms
public class DemoApplication {


   public static void main(String[] args) {

      SpringApplication.run(DemoApplication.class, args);
   }
}
複製代碼

隊列(queue):

http://localhost:8080/sendqueue?msg=hello%20mq

測試 topic

須要在  application.properties  添加 

spring.jms.pub-sub-domain=true
#若是爲True,則是Topic;若是是false或者默認,則是queue。
複製代碼

http://localhost:8080/sendtopic?msg=hello%20mq%20topic

springboot+activemq topic與 queue 並存實現方案

 1. 打開 application.properties 文件 添加  spring.activemq.in-memory=true  spring.activemq.pool.enabled=false

spring.activemq.in-memory=true
#是不是內存模式,默認爲true.
spring.activemq.pool.enabled=false
#是否建立PooledConnectionFactory,而非ConnectionFactory,默認false
複製代碼

二、自定義工廠

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.config.DefaultJmsListenerContainerFactory;
import org.springframework.jms.config.JmsListenerContainerFactory;

import javax.jms.ConnectionFactory;

/**
 * @author Yang
 * 描述:
 */
@Configuration
public class MyContainerFactory {

    /**
     * 主題模式
     * @param connectionFactory
     * @return
     */
    @Bean
    public JmsListenerContainerFactory<?> jmsListenerContainerTopic(ConnectionFactory connectionFactory) {
        DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory();
        bean.setPubSubDomain(true);
        bean.setConnectionFactory(connectionFactory);
        return bean;
    }

    /**
     * 隊列模式
     * @param connectionFactory
     * @return
     */

    @Bean
    public JmsListenerContainerFactory<?> jmsListenerContainerQueue(ConnectionFactory  connectionFactory) {
        DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory();
        bean.setConnectionFactory(connectionFactory);
        return bean;
    }
}
複製代碼

三、消費者 consumer 添加   @JmsListener(destination="",containerFactory="")

import org.springframework.jms.annotation.JmsListener;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Component;

/**
 * @author Yang
 * 描述:
 */
@Component
public class Consumer {

    @JmsListener(destination = "queue",containerFactory ="jmsListenerContainerQueue")
    @SendTo("returnmsg")
    public String receiveQueue(String msg) {
        System.out.println("==============" + msg + "==================");
        return "老鐵我收到了"+msg;
    }

    @JmsListener(destination = "queue",containerFactory ="jmsListenerContainerQueue")
    public void receiveQueue2(String msg) {
        System.out.println("======receiveQueue2========" + msg + "=========receiveQueue2=========");
    }


    @JmsListener(destination = "topic",containerFactory ="jmsListenerContainerTopic")
    @SendTo("returnmsg")
    public String receiveTopic(String msg){
        System.out.println("==topic=====" + msg + "=======topic====");
        return "topic"+msg;
    }

    @JmsListener(destination = "topic",containerFactory ="jmsListenerContainerTopic")
    public void receiveTopic2(String msg){
        System.out.println("==topic2=====" + msg + "=======topic2====");
    }
}
複製代碼

4.效果:

5.代碼下載

相關文章
相關標籤/搜索