Hi ,大家好
最近在学习JMS(Java Message Service),用到的是activemq(消息队列),写了简单的例子,跟大家一起分享一下:
1.JMS和activemq之间的关系 : JMS是一种标准规范,接口形式(消息发送是异步,非阻塞的)/activemq则是实现了JMS,存在点对点/发布订阅
2.应用场景 : 系统A---->系统B 发送消息 , 则是就需要消息系统activemq来完成这个任务
3.练习需要用到的jar包 : activemq-core-5.7.0.jar , geronimo-j2ee-management_1.1_spec-1.0.1.jar , geronimo-jms_1.1_spec-1.1.1.jar , org.slf4j.api_1.6.4.jar
4.练习需要用到的activemq包 ,官网下载windoiws版本/linux版本(看个人喜好,建议用linux版本) , 下面的例子是windows版本,为了方便
5.下载解压之后双击运行bin目录下win64下activemq.bat
6.运行完毕之后打开web控制台进行查看验证 , 网页地址栏输入 : http://localhost:8161/admin user : admin pwd : admin
7.创建两个工程A和工程B编写测试类 :
A
package activemqA;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnectionFactory;
//生产者
public class Sender {
public static void main(String args[]){
Sender sender = new Sender();
sender.sendMessage("hello,activemqB");
}
public void sendMessage(String msg){
ConnectionFactory connectionFactory = null;
Connection connection = null;
Session session = null;
try {
//1.创建连接工厂
connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
//2.得到一个连接
connection = connectionFactory.createConnection();
//3.创建一个Session
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//4.创建目的地
Destination destination = session.createQueue("myQueue");
//5.创建发送者
MessageProducer messageProducer = session.createProducer(destination);
//6.创建文本消息
TextMessage textMessage = session.createTextMessage(msg);
//7.发送消息
messageProducer.send(textMessage);
} catch (JMSException e) {
e.printStackTrace();
}finally{
//8.关闭connection和sessiosn
try {
if(connection !=null){
connection.close();
}
if (session !=null) {
session.close();
}
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}
检验消息是否发送成功请查看:web控制台会显示条数
package activemqB;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnectionFactory;
//消费者
public class Receiver {
public static void main(String args[]){
Receiver receiver = new Receiver();
receiver.receiverMessage();
}
public void receiverMessage(){
ConnectionFactory connectionFactory = null;
Connection connection = null;
Session session =null;
try {
//1.创建连接工厂
connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
//2.得到一个连接
connection = connectionFactory.createConnection();
//3.创建一个Session
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//4.创建目的地
Destination destination = session.createQueue("myQueue");
//5.创建接受者
MessageConsumer messageConsumer = session.createConsumer(destination);
//6.打开连接
connection.start();
//7.接收消息
TextMessage textMessage = (TextMessage) messageConsumer.receive(1000);
//8.输出验证
System.out.println("接收到的消息为:"+textMessage.getText());
} catch (JMSException e) {
e.printStackTrace();
}finally {
try {
if (connection !=null) {
connection.close();
}
if (session !=null) {
session.close();
}
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}
8.温馨提示:需要注意的是在编写生产者时创建文本应把msg参数放进去,否则消费者这边输出是null