java消息服务,JMS 和 ActiveMQ
2019独角兽企业重金招聘Python工程师标准>>>
JMS支持两种消息传送模式,点对点模式和发布订阅模式,
点对点模式:
发布订阅模式:
JMS API:
共公的API:
ConnectionFactory
Connection
Destination
Session
Message
MessageProducer
MessageConsumer
点对点 API:
QueueConnectionFactory
QueueConnection
Queue
QueueSession
Message
QueueSender
QueueReceiver
发布订阅 API (Publish-Subscribe):
TopicConnectionFactory
TopicConnection
Topic
TopicSession
Message
TopicPublisher
TopicSubscriber
下面是实例:
公共的 API 实例:
首先从 http://activemq.apache.org/activemq-5141-release.html 下载 ActiveMQ ,解压,然后运行activemq.bat 启动。
然后在浏览器输入 http://localhost:8161/admin/,密码和用户名都是 admin,
然后创建一个 Queue,名字随意
新建项目,把 jar 包拷进项目 activemq-all-5.14.1.jar
公共的 API :
//消息的发送者
public class Sender {public static void main(String[] args) throws JMSException {//连接工厂,JMS用它来创建连接ConnectionFactory connectionFactory =new ActiveMQConnectionFactory(ActiveMQConnectionFactory.DEFAULT_USER,ActiveMQConnectionFactory.DEFAULT_PASSWORD,"tcp://localhost:61616");//连接对象Connection connection = connectionFactory.createConnection();connection.start();//一个用来发送或者接受消息的线程Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);//消息的目的地,即消息发送给谁Destination destination = session.createQueue("FisrstQueue");//消息的发送者MessageProducer producer = session.createProducer(destination);producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);for (int i = 0; i < 5; i++) {Date date = new Date();TextMessage textMessage = session.createTextMessage("ActiveMQ 发送的消息: " + date);System.out.println("发送的消息: " + "ActiveMQ 发送的消息: " + date);producer.send(textMessage);try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}}session.commit();//关闭连接}
}
//消息的接收者
public class Receive {public static void main(String[] args) throws JMSException{//连接工厂,JMS用它来创建连接ConnectionFactory connectionFactory =new ActiveMQConnectionFactory(ActiveMQConnectionFactory.DEFAULT_USER,ActiveMQConnectionFactory.DEFAULT_PASSWORD,"tcp://localhost:61616");//连接对象Connection connection = connectionFactory.createConnection();connection.start();//一个用来发送或者接受消息的线程Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);//消息的目的地,即消息发送给谁Destination destination = session.createQueue("FisrstQueue");//消息的发送者MessageConsumer consumer = session.createConsumer(destination);while (true) {//设置接收者接收消息的时间,为了便于测试,这里谁定为100sTextMessage message = (TextMessage) consumer.receive(10000);if (null != message) {System.out.println("收到消息" + message.getText());} else {break;}}//关闭连接}
}
效果:
点对点消息传输模式:
//消息接收者
public class MyQueueReceiver {public static void main(String[] args) throws JMSException {final String DEFAULT_USER = ActiveMQConnectionFactory.DEFAULT_USER;final String DEFAULT_PASSWORD = ActiveMQConnectionFactory.DEFAULT_PASSWORD;final String DEFAULT_URI = ActiveMQConnectionFactory.DEFAULT_BROKER_URL;QueueConnectionFactory connectionFactory= new ActiveMQConnectionFactory(DEFAULT_USER,DEFAULT_PASSWORD,DEFAULT_URI);QueueConnection connection = connectionFactory.createQueueConnection();connection.start();QueueSession session = connection.createQueueSession(true, Session.AUTO_ACKNOWLEDGE);Queue queue = session.createQueue("myQueue");QueueReceiver receiver = session.createReceiver(queue);while (true) {//设置接收者接收消息的时间,为了便于测试,这里谁定为100sTextMessage message = (TextMessage) receiver.receive(10000);if (null != message) {System.out.println("收到消息" + message.getText());} else {break;}}}//关闭连接
}
//消息的发送者
public class MyQueueSender {public static void main(String[] args) throws JMSException {final String DEFAULT_USER = ActiveMQConnectionFactory.DEFAULT_USER;final String DEFAULT_PASSWORD = ActiveMQConnectionFactory.DEFAULT_PASSWORD;final String DEFAULT_URI = ActiveMQConnectionFactory.DEFAULT_BROKER_URL;QueueConnectionFactory connectionFactory= new ActiveMQConnectionFactory(DEFAULT_USER,DEFAULT_PASSWORD,DEFAULT_URI);QueueConnection connection = connectionFactory.createQueueConnection();connection.start();QueueSession session = connection.createQueueSession(true, Session.AUTO_ACKNOWLEDGE);Queue queue = session.createQueue("myQueue");QueueSender sender = session.createSender(queue);sender.setDeliveryMode(DeliveryMode.NON_PERSISTENT);TextMessage message = session.createTextMessage();Date date = new Date();message.setText("this'time is :" + date);System.out.println("MyQueueSender send message : " + date);sender.send(message);session.commit();//关闭连接}
发布订阅模式
在 http://localhost:8161/admin/ 上创建一个 topic ,名字随意, 我的是 myTopic
一个发布者,三个订阅者
/**发布订阅模式:* 一个发布者对应三个订阅者* 消息的发送者*/
public class Publisher {public static void main(String[] args) throws Exception{TopicConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");TopicConnection connection = connectionFactory.createTopicConnection();connection.start();TopicSession session = connection.createTopicSession(true, Session.AUTO_ACKNOWLEDGE);Topic topic = session.createTopic("myTopic");TopicPublisher publisher = session.createPublisher(topic);publisher.setDeliveryMode(DeliveryMode.NON_PERSISTENT);for (int i = 0; i < 5; i++) {TextMessage message = session.createTextMessage();Date date = new Date();message.setText("this'time is :" + date);System.out.println("Publisher send message : " + date);publisher.send(message);Thread.sleep(3000);}session.commit();//关闭连接}
}
//消息订阅者1(消费者)
public class Subscriber_01 {public static void main(String[] args) throws JMSException{TopicConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");TopicConnection connection = connectionFactory.createTopicConnection();connection.start();TopicSession session = connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);Topic topic = session.createTopic("myTopic");//TopicSubscription subscription = session.createSubscriber(topic);MessageConsumer consumer = session.createConsumer(topic);consumer.setMessageListener(new MessageListener() {public void onMessage(Message message) {TextMessage tm = (TextMessage) message;try {System.out.println("Subscriber_01 received message :" + tm.getText());}catch (JMSException e){e.printStackTrace();}}});}
}
//消息订阅者2
public class Subscriber_02 {public static void main(String[] args) throws JMSException {TopicConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");TopicConnection connection = connectionFactory.createTopicConnection();connection.start();Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);Topic topic = session.createTopic("myTopic");MessageConsumer consumer = session.createConsumer(topic);consumer.setMessageListener(new MessageListener() {public void onMessage(Message message) {TextMessage tm = (TextMessage) message;try {System.out.println("Subscriber_02 received message :" + tm.getText());}catch (JMSException e){e.printStackTrace();}}});}
}
//消息订阅者3
public class Subscriber_03 {public static void main(String[] args) throws JMSException {TopicConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");TopicConnection connection = connectionFactory.createTopicConnection();connection.start();Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);Topic topic = session.createTopic("myTopic");MessageConsumer consumer = session.createConsumer(topic);consumer.setMessageListener(new MessageListener() {public void onMessage(Message message) {TextMessage tm = (TextMessage) message;try {System.out.println("Subscriber_03 received message :" + tm.getText());}catch (JMSException e){e.printStackTrace();}}});}
}
启动运行程序:
转载于:https://my.oschina.net/mengyuankan/blog/781986
java消息服务,JMS 和 ActiveMQ相关推荐
- ActiveMQ学习总结(5)——Java消息服务JMS详解
JMS: Java消息服务(Java Message Service) JMS是用于访问企业消息系统的开发商中立的API.企业消息系统可以协助应用软件通过网络进行消息交互. JMS的编程过程很简单,概 ...
- JAVA消息服务JMS规范及原理详解
一.简介 JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进 ...
- Java消息服务JMS详解
2019独角兽企业重金招聘Python工程师标准>>> JMS: Java消息服务(Java Message Service) JMS是用于访问企业消息系统的开发商中立的API.企业 ...
- java jms 消息服务_Java消息服务JMS详解
Java消息服务(JMS Java Message Services)提供了点对点模式(Point-to-Point Queue)和发布-订阅模式(Publish-Subscribe Topics). ...
- JMS(Java消息服务)与消息队列ActiveMQ基本使用(一)
最近的项目中用到了mq,之前自己一直在码农一样的照葫芦画瓢.最近几天研究了下,把自己所有看下来的文档和了解总结一下. 一. 认识JMS 1.概述 对于JMS,百度百科,是这样介绍的:JMS即Java消 ...
- JMS(Java消息服务)(Activemq简单介绍)
是什么? JMS(java消息服务)是规范,它定义了一些规则,一些接口.具体实现由各种做这个产品的厂家或开源组织来实现. 为什么? 在JMS还没有诞生前,每个企业都会有自己的一套内部消息系统,比如项目 ...
- JMS(Java消息服务)入门教程
什么是Java消息服务 Java消息服务指的是两个应用程序之间进行异步通信的API,它为标准消息协议和消息服务提供了一组通用接口,包括创建.发送.读取消息等,用于支持JAVA应用程序开发.在J2EE中 ...
- JMS (Java消息服务) 入门教程
转载自:https://www.cnblogs.com/chenpi/p/5559349.html 什么是Java消息服务 Java消息服务指的是两个应用程序之间进行异步通信的API,它为标准消息协议 ...
- java jms activemq_JMS-ActiveMQ与Java消息服务
JMS:Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间或分布式系统中发送消息,进行异步通. ...
- JMS : Java Message Service (Java消息服务)之一 [转]
为什么80%的码农都做不了架构师?>>> 1 引言 1.1 编写目的 本文作为B2bi项目中开源产品JORAM的使用指导文档,旨在帮助项目组人员方便明了的进行JMS模块的详细设 ...
最新文章
- Django模板用法
- 链式存储mysql_链栈:栈的链式存储结构
- Git初学札记(三)————创建Git版本库
- OpenCV中霍夫圆检测
- sybase函数学习(八)
- 【Elasticsearch】使用Elasticsearch中的copy_to来提高搜索效率
- 传感器 倾斜角 android,android – 如何使用sensor / s获得手机的角度/度数?
- 使用@selector模仿代理功能降低代码耦合度
- python最简洁!最简单!爬取糗百笑话内容!(有详细说明)
- FPGA-VGA驱动
- 打造圣诞节H5游戏最强音
- intellij IDEA 中,.properties文件unicode转中文
- 2021邵阳市区三中高考成绩查询,2021年邵阳市普通高考科目及各科分数
- 关于物联网通信协议(接入协议)
- 第二篇 编写一个fluter应用
- etlgr是什么服务器_什么是ETL,ETL工程师的的主要工作职责是什么?
- 常见花材的固定的方法有哪些_别再傻傻只知道使用花泥了,这4种纯天然花材固定方法你该试试!...
- 新年哪些科技产品值得买?这里也许就有你想要的答案
- uniapp 英寸尺子 尺子 左右滑动
- 米家APP又崩了,智能家居还可靠吗?
热门文章
- SharePoint Server 2010 安装图解
- JDK1.5 新特性
- 2006年大话IT数码新潮
- centOS下调整swap
- golang import后带“_”下划线的意义
- 【ASP.NET 问题】Win7中IIS被防火墙阻止导致外网无法访问的解决方法。
- 用XMing + Putty 凿出让Linux 图形界面在Windows裸奔的隧道
- 当PrintForm遇到RPC服务不可用的错误”
- [bzoj 4199][NOI 2015]品酒大会
- SpringCloud配置中心-Config