Active MQ入门2,Spring Boot整合Active MQ
1、搭建Spring Boot项目
首先创建一个Spring Boot的项目,在pom文件中加入:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
加入Spring Boot 对Active MQ支持的starter包:starter-activemq
还有Active MQ的连接池:activemq-pool
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-pool</artifactId>
</dependency>
2、配置相关信息
在application.properties加入Active MQ的相关配置信息
spring.activemq.broker-url=tcp://localhost:61616
spring.activemq.user=admin
spring.activemq.password=admin
spring.activemq.pool.enabled=true
3、编写配置类
Spring Boot 规定必须配置Active MQ的连接工厂,和Spring的配置方法一样,只不过这是注解与Java代码的方式进行配置
@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;
}
}
4、发送端代码(生产者)
@Service
public class ProducerQueue {
@Autowired
private JmsMessagingTemplate jmsTemplate;//简单操作
@Autowired
private JmsTemplate template;//可以做更细微的控制
// 发送消息,destination是发送到的队列,message是待发送的消息
public void sendMessageByJmsMessagingTemplate(Destination destination, final String message){
jmsTemplate.convertAndSend(destination, message);
}
public void sendMessageByJmsTemplate(Destination destination, final String message){
template.send(destination, session -> {
TextMessage msg = session.createTextMessage();
msg.setText(message + "othre information");
return msg;
});
}
}
5、接收端代码(消费者)
@Component
public class ConsumerAQueue {
// 使用JmsListener配置消费者监听的队列,其中text是接收到的消息
@JmsListener(destination = "springboot.queue")
public void receiveQueue(String text){
System.out.println(this.getClass().getName()+" receive msg:"+text);
}
}
6、编写测试类
首先我们启动Spring Boot程序。
然后我们在test目录下编写测试类
@RunWith(SpringRunner.class)
@SpringBootTest
public class AmSpringbootApplicationTests {
@Autowired
private ProducerQueue producerQueue;
@Test
public void testQueueNormal() {
Destination destination
= new ActiveMQQueue("springboot.queue");
for(int i=0; i<3; i++){
producerQueue.sendMessageByJmsMessagingTemplate(destination,
"NO:"+i+";my name is Mark!!!");
}
}
}