「這是我參與8月更文挑戰的第4天,活動詳情查看:8月更文挑戰」java
到這裏項目就搭建完成了。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
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
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.代碼下載