application.properties

spring.activemq.broker-url=tcp://localhost:61616
spring.activemq.user=admin
spring.activemq.password=admin
spring.activemq.pool.enabled=true
import org.apache.activemq.ActiveMQConnectionFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.annotation.EnableJms;
import org.springframework.jms.config.DefaultJmsListenerContainerFactory;
import org.springframework.jms.config.JmsListenerContainerFactory;

import javax.jms.ConnectionFactory;

/**

* 类说明:
*/
@Configuration
@EnableJms
public class ActiveMqConfiguration {

@Value("${spring.activemq.user}")
private String usrName;

@Value("${spring.activemq.password}")
private String password;

@Value("${spring.activemq.broker-url}")
private String brokerUrl;

@Bean
public ConnectionFactory connectionFactory(){
ActiveMQConnectionFactory connectionFactory
= new ActiveMQConnectionFactory();
connectionFactory.setBrokerURL(brokerUrl);
connectionFactory.setUserName(usrName);
connectionFactory.setPassword(password);
return connectionFactory;
}

@Bean("jmsTopicListenerContainerFactory")
public JmsListenerContainerFactory jmsTopicListenerContainerFactory(
ConnectionFactory connectionFactory
){
DefaultJmsListenerContainerFactory factory
= new DefaultJmsListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
factory.setPubSubDomain(true);
return factory;
}

}

生产者queue模式

@Service
public class ProducerQueue {

@Autowired
private JmsMessagingTemplate jmsTemplate;
@Autowired
private JmsTemplate template;//可以做更细微的控制

// 发送消息,destination是发送到的队列,message是待发送的消息
public void sendMessage(Destination destination, final String message){
jmsTemplate.convertAndSend(destination, message);
template.send(destination, new MessageCreator() {
@Override
public Message createMessage(Session session)
throws JMSException {
TextMessage msg = session.createTextMessage();
msg.setText("othre information");
return msg;
}
});
}


}

消费者queue模式

@Component
public class ConsumerAQueue {
// 使用JmsListener配置消费者监听的队列,其中text是接收到的消息
@JmsListener(destination = "springboot.queue")
public void receiveQueue(String text){
System.out.println(this.getClass().getName()+" receive msg:"+text);
}
}
@Component
public class ConsumerBQueue {
// 使用JmsListener配置消费者监听的队列,其中text是接收到的消息
@JmsListener(destination = "springboot.queue")
public void receiveQueue(String text) {
System.out.println(this.getClass().getName()+" 收到的报文为:"+text);
}
}

生产者topic模式:

@Service
public class ProducerTopic {

@Autowired
private JmsMessagingTemplate jmsTemplate;

// 发送消息,destination是发送到的队列,message是待发送的消息
public void sendMessage(Destination destination, final String message){
jmsTemplate.convertAndSend(destination, message);
}


}

消费者topic模式

@Component
public class ConsumerATopic {
// 使用JmsListener配置消费者监听的队列,其中text是接收到的消息
@JmsListener(destination = "springboot.topic",
containerFactory = "jmsTopicListenerContainerFactory"
)
public void receiveTopic(String text) {
System.out.println(this.getClass().getName()+" 收到的报文为:"+text);
}
}
@Component
public class ConsumerBTopic {
// 使用JmsListener配置消费者监听的队列,其中text是接收到的消息
@JmsListener(destination = "springboot.topic",
containerFactory = "jmsTopicListenerContainerFactory"
)
public void receiveTopic(String text) {
System.out.println(this.getClass().getName()+" 收到的报文为:"+text);
}
}

Request-Response模式

消息中间件 - ActiveMQ Springboot (五)_i++

生产者:

@Service
public class ProducerR {

@Autowired
private JmsMessagingTemplate jmsTemplate;

// 发送消息,destination是发送到的队列,message是待发送的消息
public void sendMessage(Destination destination, final String message){
jmsTemplate.convertAndSend(destination, message);

}

@JmsListener(destination = "out.replyTo.queue")
public void consumerMessage(String text){
System.out.println("从out.replyTo.queue收到报文"+text);
}

}

消费者:

@Component
public class ConsumerR {
// 使用JmsListener配置消费者监听的队列,其中text是接收到的消息
@JmsListener(destination = "springboot.replyto.queue")
@SendTo("out.replyTo.queue")
public String receiveQueue(String text) {
System.out.println(this.getClass().getName()+" 收到的报文为:"+text);
return "Hello,I watch you";
}
}

测试类:

import javax.jms.Destination;

@RunWith(SpringRunner.class)
@SpringBootTest
public class AmSpringbootApplicationTests {

@Autowired
private ProducerQueue producerQueue;
@Autowired
private ProducerR producerR;
@Autowired
private ProducerTopic producerTopic;

@Test
public void testQueueNormal() {
Destination destination
= new ActiveMQQueue("springboot.queue");
for(int i=0; i<10; i++){
producerQueue.sendMessage(destination,
"NO:"+i+";my name is Mark!!!");
}
}

@Test
public void testTopicNormal() {
Destination destination
= new ActiveMQTopic("springboot.topic");
for(int i=0; i<3; i++){
producerTopic.sendMessage(destination,
"NO:"+i+";James like 13 !!!");
}
}

@Test
public void testReplyTo() {
Destination destination
= new ActiveMQQueue("springboot.replyto.queue");
for(int i=0; i<3; i++){
producerR.sendMessage(destination,
"NO:"+i+";my name is Mark!!!");
}
}

}