JMS:
JMS即JavaMessageService:Java消息服务
其通过统一的Java API层面的标准,使得多个客户端可以通过JMS进行交互,大部分消息中间件提供商都对JMS提供支持。JMS和ActiveMQ的关系就像JDBC和JDBC驱动的关系。
JMS包括2种消息类型:
- 点对点
- 发布者/订阅者
且JMS仅支持Java平台
由于JMS是一套标准,所以SpringBoot整合JMS必然是整合JMS的某一个实现。
ActiveMQ:
Apache ActiveMQ是一个开源的消息中间件,完全支持JMS 1.1规范,支持多种编程语言(C,C++,C#,Delphi,Erlang,AdobeFlash,Haskell,Java,Javascript,Perl,PHP,Pike,Python,Ruby)和协议(OpenWire,REST,STOMP,WS-Notification,MQTT,XMPP,AMQP)
且其提供了集群支持。
ActiveMQ安装:(centos7)
1.安装Java环境:
2.下载ActiveMQ:
wget http://mirrors.hust.edu.cn/apache//activemq/5.15.12/apache-activemq-5.15.12-bin.tar.gz
3.解压下载的文件:
tar -zxvf apache-activemq-5.15.12-bin.tar.gz
4.启动ActiveMQ:
然后启动成功后,关闭Centos防火墙,在浏览器中输入地址:默认端口8161
当然,这里通过的是回环地址访问的,也可以通过网络ip访问,查看centosip:
看到上述页面代表启动成功了。
SpringBoot整合ActiveMQ
1.添加ActiveMQ依赖:
2.application.properties中进行配置:
broker地址默认端口是61616,
trust-all是配置信任所有的包,这个配置是为了支持发送对象消息。
最后配置了ActiveMQ的用户名和密码
3.配置类中提供一个消息队列Bean,该实例由ActiveMQ提供‘;
package com.yinlei.activemq;
import org.apache.activemq.command.ActiveMQQueue;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import javax.jms.Queue;
@SpringBootApplication
public class ActivemqApplication {
public static void main(String[] args) {
SpringApplication.run(ActivemqApplication.class, args);
}
@Bean
Queue queue(){
return new ActiveMQQueue("amq");
}
}
4.创建一个JMS组件来完成消息的发送和接收:
注意导包:
package com.yinlei.activemq;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.stereotype.Component;
import javax.jms.Queue;
import java.io.Serializable;
import java.util.Date;
/**
* JMS组件来完成消息的发送和接收
*/
@Component
public class JMSComponent {
/**
* Spring提供的一个JMS消息发送模板,方便进行消息发送
*/
@Autowired
JmsMessagingTemplate messagingTemplate;
@Autowired
Queue queue;
public void send(Message message){
//消息发送方法,参数1 是消息队列,参数2 是消息内容
messagingTemplate.convertAndSend(this.queue,message);
}
/**
* 注解表示对应的方法是1个消息消费者,消息消费者订阅的消息destionation为amq
* @param message
*/
@JmsListener(destination = "amq")
public void receive(Message message){
System.out.println("收到了:"+message);
}
}
@Getter
@Setter
class Message implements Serializable{
private String content;
private Date date;
}
5.消息发送测试: