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相关推荐

  1. ActiveMQ学习总结(5)——Java消息服务JMS详解

    JMS: Java消息服务(Java Message Service) JMS是用于访问企业消息系统的开发商中立的API.企业消息系统可以协助应用软件通过网络进行消息交互. JMS的编程过程很简单,概 ...

  2. JAVA消息服务JMS规范及原理详解

    一.简介 JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进 ...

  3. Java消息服务JMS详解

    2019独角兽企业重金招聘Python工程师标准>>> JMS: Java消息服务(Java Message Service) JMS是用于访问企业消息系统的开发商中立的API.企业 ...

  4. java jms 消息服务_Java消息服务JMS详解

    Java消息服务(JMS Java Message Services)提供了点对点模式(Point-to-Point Queue)和发布-订阅模式(Publish-Subscribe Topics). ...

  5. JMS(Java消息服务)与消息队列ActiveMQ基本使用(一)

    最近的项目中用到了mq,之前自己一直在码农一样的照葫芦画瓢.最近几天研究了下,把自己所有看下来的文档和了解总结一下. 一. 认识JMS 1.概述 对于JMS,百度百科,是这样介绍的:JMS即Java消 ...

  6. JMS(Java消息服务)(Activemq简单介绍)

    是什么? JMS(java消息服务)是规范,它定义了一些规则,一些接口.具体实现由各种做这个产品的厂家或开源组织来实现. 为什么? 在JMS还没有诞生前,每个企业都会有自己的一套内部消息系统,比如项目 ...

  7. JMS(Java消息服务)入门教程

    什么是Java消息服务 Java消息服务指的是两个应用程序之间进行异步通信的API,它为标准消息协议和消息服务提供了一组通用接口,包括创建.发送.读取消息等,用于支持JAVA应用程序开发.在J2EE中 ...

  8. JMS (Java消息服务) 入门教程

    转载自:https://www.cnblogs.com/chenpi/p/5559349.html 什么是Java消息服务 Java消息服务指的是两个应用程序之间进行异步通信的API,它为标准消息协议 ...

  9. java jms activemq_JMS-ActiveMQ与Java消息服务

    JMS:Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间或分布式系统中发送消息,进行异步通. ...

  10. JMS : Java Message Service (Java消息服务)之一 [转]

    为什么80%的码农都做不了架构师?>>>    1 引言 1.1 编写目的 本文作为B2bi项目中开源产品JORAM的使用指导文档,旨在帮助项目组人员方便明了的进行JMS模块的详细设 ...

最新文章

  1. Django模板用法
  2. 链式存储mysql_链栈:栈的链式存储结构
  3. Git初学札记(三)————创建Git版本库
  4. OpenCV中霍夫圆检测
  5. sybase函数学习(八)
  6. 【Elasticsearch】使用Elasticsearch中的copy_to来提高搜索效率
  7. 传感器 倾斜角 android,android – 如何使用sensor / s获得手机的角度/度数?
  8. 使用@selector模仿代理功能降低代码耦合度
  9. python最简洁!最简单!爬取糗百笑话内容!(有详细说明)
  10. FPGA-VGA驱动
  11. 打造圣诞节H5游戏最强音
  12. intellij IDEA 中,.properties文件unicode转中文
  13. 2021邵阳市区三中高考成绩查询,2021年邵阳市普通高考科目及各科分数
  14. 关于物联网通信协议(接入协议)
  15. 第二篇 编写一个fluter应用
  16. etlgr是什么服务器_什么是ETL,ETL工程师的的主要工作职责是什么?
  17. 常见花材的固定的方法有哪些_别再傻傻只知道使用花泥了,这4种纯天然花材固定方法你该试试!...
  18. 新年哪些科技产品值得买?这里也许就有你想要的答案
  19. uniapp 英寸尺子 尺子 左右滑动
  20. 米家APP又崩了,智能家居还可靠吗?

热门文章

  1. SharePoint Server 2010 安装图解
  2. JDK1.5 新特性
  3. 2006年大话IT数码新潮
  4. centOS下调整swap
  5. golang import后带“_”下划线的意义
  6. 【ASP.NET 问题】Win7中IIS被防火墙阻止导致外网无法访问的解决方法。
  7. 用XMing + Putty 凿出让Linux 图形界面在Windows裸奔的隧道
  8. 当PrintForm遇到RPC服务不可用的错误”
  9. [bzoj 4199][NOI 2015]品酒大会
  10. SpringCloud配置中心-Config