前言:JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。
安装activemq的教程百度
1.4.0提供了单独的spring-boot-starter-activemq
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
1.4.0之前需要分别导入两个依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-broker</artifactId>
</dependency>
spring.activemq.in-memory=true //使用内存
spring.activemq.pool.enabled=false //不需要开启连接池
#JMS config
spring.activemq.broker-url=tcp:// :61616 //mq单独服务地址
spring.activemq.user= //用户名
spring.activemq.password= //密码
注意:如果没有设置mq的单独服务地址默认会将在项目启动时启动一个单独的MQ服务。这个时候需要保证该服务不会重启,如果正在异步通信中关闭MQ会造成所有队列中的消息丢失。
@Bean
public Queue queue() {
return new ActiveMQQueue("sample.queue");//队列的名字
}
在主程序启动 @EnableJms
package com.wangnian;
import javax.jms.Queue;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.stereotype.Component;
@Component
public class Producer implements CommandLineRunner {
@Autowired
private JmsMessagingTemplate jmsMessagingTemplate;
@Autowired
private Queue queue;
@Override
public void run(String... args) throws Exception {
send("发送消息");
}
public void send(String msg) {
this.jmsMessagingTemplate.convertAndSend(this.queue, msg);
}
}
demo启动项目执行run方法发送消息
package com.wangnian;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;
@Component
public class Consumer {
@JmsListener(destination = "sample.queue")//这就是配置的bean时候的队列名字
public void receiveQueue(String text) {
System.out.println(text);
}
2016-09-04 12:20:01.041 INFO 3436 --- [ main] o.s.c.support.DefaultLifecycleProcessor : Starting beans in phase 2147483647 发送消息 2016-09-04 12:20:01.728 INFO 3436 --- [ main] com.wangnian.SendJmsApplication : Started SendJmsApplication in 1.969 seconds (JVM running for 2.309)
activemq有一个web网页控台,如果公网访问的话需要设置一下密码。
修改web控台密码
\conf\jetty-realm.properties
# Defines users that can access the web (console, demo, etc.)
# username: password [,rolename ...]
admin: newadmin, admin 用户名-密码-权限
user: user, user
修改连接密码
\conf\activemq.xml
在broker标签下 systemUsage标签之前加入plugins
<!--启动连接密码-->
<plugins>
<simpleAuthenticationPlugin>
<users>
<authenticationUser username="${activemq.username}" password="${activemq.password}" groups="users,admins"/>
</users>
</simpleAuthenticationPlugin>
</plugins>