Activemq可以说是核心,是基础,是一个完全支持JMS规范的JMS Provider实现 ,实现JMS 接口的消息中间件,
它非常快速,支持多种语言的客户端和协议,而且可以非常容易的嵌入到企业的应用环境中,并有许多高级功能。
简单介绍一下JMS的术语:
Provider (messageProvider):生产者
Consumer(messsageConsumer):消费者
PTP:PONIT TO POINT 即点对点的消息模型;
Pub/Sub: Publish/Subscribe 即发布/订阅
Queue : 队列目标
Topic: 主题目标
ConnectionFactory : 连接工厂
Connection: JMS客户端到 服务端的连接;
Destination:消息的目的地;
Session:会话 一个发送或接受消息的线程;
消息中间件
我们简单的介绍一下消息中间件,对它有一个基本认识就好,消息中间件(MOM:Message Orient middleware)。
消息中间件有很多的用途和优点:
1. 将数据从一个应用程序传送到另一个应用程序,或者从软件的一个模块传送到另外一个模块;
2. 负责建立网络通信的通道,进行数据的可靠传送。
3. 保证数据不重发,不丢失
4. 能够实现跨平台操作,能够为不同操作系统上的软件集成技工数据传送服务
1.下载ActiveMQ
去官方网站下载:http://activemq.apache.org/
2.运行ActiveMQ
解压缩apache-activemq-5.5.1-bin.zip,然后双击apache-activemq-5.5.1\bin\activemq.bat运行ActiveMQ程序。
启动ActiveMQ以后,登陆:http://localhost:8161/admin/, 修改端口号的话 conf/jetty.xml,jetty-realm.properties 添加用户名密码
conf /activemq.xml 增加认证
我们来做个HelloWord
package com.ccopo.helloword;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
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) throws JMSException{
//第一步 : 建立ConnectionFactory 工厂对象,需要填入用户名密码,以及要连接的地址,均使用默认即可,默认端口为:tcp://localhsot:61616
ConnectionFactory connectionFactory =new ActiveMQConnectionFactory(
ActiveMQConnectionFactory.DEFAULT_USER,
ActiveMQConnectionFactory.DEFAULT_PASSWORD,
"tcp://DESKTOP-60HPCCD:61616"
);
//第二步:通过connectionFactory 工厂对象我们创建一个Connection连接,并且调用Connection的Start方法开启连接 因为Connection默认关闭的
Connection Connection= connectionFactory.createConnection();
Connection.start();
//第三步:通过Connection对象创建Session会话 ,用于接受消息,参数配置1为是否启用事务,2为签收模式,一般我们都是自动签收
Session session =Connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);
//第四步 :通过Session创建Destination对象,指的是一个客户端用来指定生产消息目标和消费消息来源的对象,在PTP模式中,Destination为称作Queue
Destination Destination =session.createQueue("queue1");
//第五步L我们需要通过Session 创建消息的发送和接收对象
MessageProducer messageProducer=session.createProducer(Destination);
//第六步:我们可以使用MessageProducer的setDeliverMode方法为其设置持久化和非持久化
messageProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
//第七步:最后我们使用JMS的TextMessage形式的创建数据,并用messageProducer的Send方法发送数据
TextMessage textMessage= session.createTextMessage("我是消息");
textMessage.setText("我是消息");
messageProducer.send(textMessage);
if(Connection!=null){
Connection.close();
}
}
}
package com.ccopo.helloword;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnectionFactory;
public class Receive {
public static void main(String[] args) throws JMSException{
//第一步 : 建立ConnectionFactory 工厂对象,需要填入用户名密码,以及要连接的地址,均使用默认即可,默认端口为:tcp://localhsot:61616
ConnectionFactory connectionFactory =new ActiveMQConnectionFactory(
ActiveMQConnectionFactory.DEFAULT_USER,
ActiveMQConnectionFactory.DEFAULT_PASSWORD,
"tcp://DESKTOP-60HPCCD:61616"
);
//第二步:通过connectionFactory 工厂对象我们创建一个Connection连接,并且调用Connection的Start方法开启连接 因为Connection默认关闭的
Connection Connection= connectionFactory.createConnection();
Connection.start();
//第三步:通过Connection对象创建Session会话 ,用于接受消息,参数配置1为是否启用事务,2为签收模式,一般我们都是自动签收
Session session =Connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);
//第四步 :通过Session创建Destination对象,指的是一个客户端用来指定生产消息目标和消费消息来源的对象,在PTP模式中,Destination为称作Queue
Destination Destination =session.createQueue("queue1");
//第五步L我们需要通过Session 创建消息的发送和接收对象
MessageConsumer messageConsumer=session.createConsumer(Destination);
while(true){
TextMessage textMessage =(TextMessage) messageConsumer.receive();//阻塞的
if(textMessage==null)break;
System.out.println("收到的内容:"+textMessage.getText());
}
if(Connection!=null){
Connection.close();
}
}
}