JMS实现JMS接口的消息中间件

Provider:生产者

Consumer:消费者

PTP:Point to Point:点对点的消息模型

Pub/Sub:Publish/Subscribe:发布订阅的消息模型

Queue:队列目标;

Topic:主题目标

ConnectionFactory:连接工厂,JMS用它创建连接、

Connection:JMS客户端到JMS Provider的连接

Destination:消息的目的地

Session:会话,一个发送或者接收消息的线程

ActiveMQ简介

ActiveMQ是Apache出品,最流行,能力强劲的开源消息总线。

ActiveMQ是一个完全支持JMS1.1和J2EE1.4规范的JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演者特殊的地位,可以说ActiveMQ在业界应用最广泛,当然如果想要有更强大的性能和海量数据处理能力,ActiveMQ还需要不断的升级版本,80%一手的业务,使用ActMQ已经足够满肚需求,大型电商网站,可以去应用RocketMQ,分布式消息中间件来实现。

下面看一个helloword:

首先,启动activeMq

启动后,在浏览器访问这个地址,就会出现activeMq的界面点击第一个选项,出现登录界面,账号密码都是admin,

这就是登录后的界面,下面开始看一下代码:

package test.mq.helloworld;

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://localhost:61616"
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
ActiveMQConnectionFactory.DEFAULT_USER,
ActiveMQConnectionFactory.DEFAULT_PASSWORD,
"tcp://localhost: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队里
// 在Pub/Sub模式,Destination被称作Topic即主题,在程序中可以使用多个Queue和Topic
Destination desiDestination = session.createQueue("queue1"); // 第五步,我们需要通过Session对象创建消息的发送和接收对象(生产者和消费者)
// MessageProducer/MessageConsumer
MessageProducer messageProducer = session
.createProducer(desiDestination); // 第六步:使用MessageProducer的setDeliveryMode方法为其设置持久性和非持久性(setDeliveryMode);
messageProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); // 第七步:使用JMS规范的textMesage形式创建数据(通过session对象),并未MessageProducer的send方法发送数据,最后关闭Connection链接。
for(int i = 0; i < 5; i++) {
TextMessage textMessage = session.createTextMessage();
textMessage.setText("测试消息!!!id为" + i);
messageProducer.send(textMessage);
} if(connection != null) {
connection.close();
} } }

这里,将消息发送给activeMq,我们运行一下,然后查看一下activeMq里面是否有发送的数据。

点击浏览器中activeMq界面的queue选项。

这里面有一个刚刚新创建的queue,点进去,是刚刚存入的5条记录。

刚刚那是生产者,下面看一下消费者端的代码:

消费者消费后,activeMQ中将不存在数据。

package test.mq.helloworld;

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://localhost:61616"
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
ActiveMQConnectionFactory.DEFAULT_USER,
ActiveMQConnectionFactory.DEFAULT_PASSWORD,
"tcp://localhost: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队里
// 在Pub/Sub模式,Destination被称作Topic即主题,在程序中可以使用多个Queue和Topic
Destination desiDestination = session.createQueue("queue1"); // 第五步,我们需要通过Session对象创建消息的发送和接收对象(生产者和消费者)
// MessageProducer/MessageConsumer
MessageConsumer messageConsumer = session
.createConsumer(desiDestination); while(true){
TextMessage msg = (TextMessage)messageConsumer.receive();
if(msg == null){
break;
}
System.out.println("收到的內容:"+msg.getText());
} if(connection != null) {
connection.close();
}
}
}

下面运行一下这个消费者:

将刚刚存入的数据,全部获取出来,下面看一下浏览器的activeMq。

待处理的数量是0,点进去也是空的,说明刚刚生产的数据已经被全部消费掉了。

ActiveMQ之HelloWorld的更多相关文章

  1. ActiveMQ 入门helloworld

    1.下载安装ActiveMQ 官网下载地址:http://activemq.apache.org/download.html ActiveMQ 提供了Windows 和Linux.Unix 等几个版本 ...

  2. ActiveMQ(2) ActiveMQ创建HelloWorld

    启动ActiveMQ: 请参见:ActiveMQ(1) 初识ActiveMQ 创建Maven工程: pom文件: <project xmlns="http://maven.apache ...

  3. JMS学习以及jms的实现activeMq

    1.JMS规范介绍: http://www.cnblogs.com/hapjin/p/5431706.html http://elim.iteye.com/blog/1893038 http://bl ...

  4. ActiveMq 之JMS 看这一篇就够了

    什么是JMS MQ 全称:Java MessageService 中文:Java 消息服务. JMS 是 Java 的一套 API 标准,最初的目的是为了使应用程序能够访问现有的 MOM 系 统(MO ...

  5. 02_ActiveMQ入门

    [ActiveMQ 入门HelloWorld例子] [启动ActiveMQ] 1.由于本人PC是64位的,选择在bin目录下的win64/activemq.bat启动. 2.启动成功后,访问http: ...

  6. 深入浅出JMS(三)--ActiveMQ简单的HelloWorld实例

    第一篇博文深入浅出JMS(一)–JMS基本概念,我们介绍了JMS的两种消息模型:点对点和发布订阅模型,以及消息被消费的两个方式:同步和异步,JMS编程模型的对象,最后说了JMS的优点. 第二篇博文深入 ...

  7. JMS【三】--ActiveMQ简单的HelloWorld实例

    第一篇博文JMS[一]--JMS基本概念,我们介绍了JMS的两种消息模型:点对点和发布订阅模型,以及消息被消费的两个方式:同步和异步,JMS编程模型的对象,最后说了JMS的优点. 第二篇博文JMS[二 ...

  8. ActiveMQ简单的HelloWorld实例

    我们使用ActiveMQ为大家实现一种点对点的消息模型. 开发时候,要将apache-activemq-5.12.0-bin.zip解压缩后里面的activemq-all-5.12.0.jar包加入到 ...

  9. 【转】深入浅出JMS(三)--ActiveMQ简单的HelloWorld实例

    这篇博文,我们使用ActiveMQ为大家实现一种点对点的消息模型.如果你对点对点模型的认识较浅,可以看一下第一篇博文的介绍. JMS其实并没有想象的那么高大上,看完这篇博文之后,你就知道什么叫简单,下 ...

随机推荐

  1. mac 关于默认python2下的pip,和python3下pip 的坑

    pip是常用的python包管理工具,类似于java的maven.用python的同学,都离不开pip. 1.在Python2.7的安装包中,easy_install.py是默认安装的,而pip需要手 ...

  2. png 2 icon

    http://www.easyicon.net/covert/ 这个网页可以转换png图片为icon格式

  3. PHP中Notice: unserialize(): Error at offset of bytes in on line 的解决方法

    使用unserialize函数将数据储存到数据库的时候遇到了这个报错,后来发现是将gb2312转换成utf-8格式之后,每个中文的字节数从2个增加到3个之后导致了反序列化的时候判断字符长度出现了问题, ...

  4. 让linux每天定时备份MySQL数据库并删除五天前的备份文件

    MYSQL定期备份是一项重要的工作,但人工操作太繁琐,也难避免有所疏漏,使用下面的方法即可让系统定期备份数据.利用系统crontab来定时执行备份文件,按日期对备份结果进行保存,达到备份的目的. 1. ...

  5. Windows下MongoDB安装配置

    一.安装 官网下载,一般选择community server版本下载,如果是企业可以选择enterprise版本,个人使用的话community就可以了,附上链接:https://www.mongod ...

  6. 爬虫--Scrapy-参数等级和请求传参

    日志等级 日志等级(种类): ERROR:错误 WARNING:警告 INFO:一般信息 DEBUG:调试信息(默认) 指定输入某一中日志信息: settings:LOG_LEVEL = ‘ERROR ...

  7. iOS开发 2x 3x图

    众所周知,iOS开发中的图片资源一般需要2倍图和3倍图,也就是2x,3x,但是最近思考了一个问题,为什么不能只提供3x的图片,2x的图片让系统从3x压缩就好了,于是上网搜索了下,得到了答案. 当我们在 ...

  8. nodejs 解决跨域

    1.失败 app.all('*', function (req, res, next) { res.header("Access-Control-Allow-Origin", &q ...

  9. DMA/Zero copy

    DMA: 直接内存访问,是一种不经过CPU而直接从内存存取数据的数据交换模式.在DMA模式下,CPU只须向DMA控制器下达指令,让DMA控制器来处理数据的传送,数据传送完毕再把信息反馈给CPU,这样就 ...

  10. jquery_ajax 地址三级联动

    jquery 的三级地址联动,原理与javascript类似,只是在触发请求的时候,使用封装好的 $.get ,$post,$.ajax 方法去执行,其余的都是一样的,后台服务器请求文件是一样的,前台 ...