先来说一说我们为什么要用这个东西啊!

比如,我们现在有这样了个问题要解决:



这样,我们就要用到中间消息间了

然后我们就说一下什么是中间消息间吧。

采用消息传送机制/消息队列 的中间件技术,进行数据交流,用在分布式系统的集成。

Java中对Jms有了定义,这是Java消息的统一接口。什么是ActiveMq呢?这是这个接口的一种实现,相当于数据库连接驱动一样,不同厂商有自己不同的实现,我们尽快看怎么用代码实现吧。

消息一共有两种接收和发送形式:点对点和发布定阅模式,也就是“一对

一”和“一对多”。

1.导包(maven):

   <dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-client</artifactId>
<version>5.13.4</version>
</dependency>

2.开始写类,提供者(发送者)和消费者(接收者)是两个不同的项目,我们先创建普通的maven项目,而不是web项目


点对点的方式(消息只能被消费一次,如果同时有多个消费者,谁先抢到就是谁的)

  • 消息提供者
 public static void main(String[] args) throws JMSException {

		//创建连接工厂,这个参数就是自己的activeMQ的地址
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.25.180:61616"); //2.创建连接
Connection connection = connectionFactory.createConnection(); //3.启动连接
connection.start(); //4.获取session(会话对象)
/*
arg0 是否启用事务
arg1 消息的确认方式 自动确认
*/
Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE); //5.创建一个队列对象,名称
Queue firstQueue = session.createQueue("firstQueue"); //6.创建一个消息的生产者对象
// Destination destination = ;//目标对象
MessageProducer producer = session.createProducer(firstQueue); //7.创建一个消息
TextMessage textMessage = session.createTextMessage("欢迎来到奇的天喻软件"); //8.发送消息
producer.send(textMessage); //9.关闭资源
producer.close();
session.close();
connection.close(); }
  • 消息消费者

前几步是一样的,都是创建连接,只有第6步不一样,创建的是一个消费者

public static void main(String[] args) throws JMSException, IOException {
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.25.180:61616"); //2.创建连接
Connection connection = connectionFactory.createConnection(); //3.启动连接
connection.start(); //4.获取session(会话对象)
/*
arg0 是否启用事务
arg1 消息的确认方式 自动确认
*/
Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE); //5.创建一个队列对象,名称
Queue firstQueue = session.createQueue("firstQueue"); //6.创建消息消费者对象
MessageConsumer consumer = session.createConsumer(firstQueue); //7.设置监听
consumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message message) {
TextMessage textMessage = (TextMessage)message;
try {
System.out.println("提取的消息是"+textMessage.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}); //8.等待键盘输入
//目的是为了让程序停止来看效果
System.in.read(); //9.关闭资源
consumer.close();
session.close();
connection.close(); }

发布订阅模式(发布消息后,只有在之前运行的消费者才能收到,消息被任何一个消费者消费后,以后启动的消费者不能消费之前的消息)

  • 消息提供者
 //创建连接工厂
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.25.180:61616"); //2.创建连接
Connection connection = connectionFactory.createConnection(); //3.启动连接
connection.start(); //4.获取session(会话对象)
/*
arg0 是否启用事务
arg1 消息的确认方式 自动确认
*/
Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE); //5
Topic topic = session.createTopic("first-topic"); //6.创建一个消息的生产者对象
// Destination destination = ;//目标对象
MessageProducer producer = session.createProducer(topic); //7.创建一个消息
TextMessage textMessage = session.createTextMessage("欢迎来到奇的天喻软件"); //8.发送消息
producer.send(textMessage); //9.关闭资源
producer.close();
session.close();
connection.close();
  • 消费者

ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.25.180:61616"); //2.创建连接
Connection connection = connectionFactory.createConnection(); //3.启动连接
connection.start(); //4.获取session(会话对象)
/*
arg0 是否启用事务
arg1 消息的确认方式 自动确认
*/
Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE); //5
Topic topic = session.createTopic("first-topic"); //6.创建消息消费者对象
MessageConsumer consumer = session.createConsumer(topic); //7.设置监听
consumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message message) {
TextMessage textMessage = (TextMessage)message;
try {
System.out.println("提取的消息是"+textMessage.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}); //8.等待键盘输入
//目的是为了让程序停止来看效果
System.in.read(); //9.关闭资源
consumer.close();
session.close();
connection.close();

总结,是不是发现上边代码都很相似,那么完全可以用Spring来管理了啊,明天我们就在Spring的中使用activeMQ

Java中间消息件——ActiveMQ入门级运用的更多相关文章

  1. java之消息队列ActiveMQ实践

    原创论文:https://www.cnblogs.com/goujh/p/8510239.html 消息队列的应用场景: 消息队列应用场景 异步处理,应用解耦,流量削锋和消息通讯四个场景 异步处理: ...

  2. java 框架-消息队列ActiveMQ

    https://www.jianshu.com/p/ecdc6eab554c ActiveMQ从入门到精通(一) 22017.03.11 21:40:42字数 2650阅读 57286 这是关于消息中 ...

  3. java 消息机制 ActiveMQ入门实例

    1.下载ActiveMQ 去官方网站下载:http://activemq.apache.org/ 我下载的时候是 ActiveMQ 5.14.0 Release版 2.运行ActiveMQ 解压缩ap ...

  4. Java消息机制 ActiveMQ入门实例

    转载自:http://www.cnblogs.com/wyh3721/p/5917316.html 1.下载ActiveMQ 去官方网站下载:http://activemq.apache.org/  ...

  5. Java消息队列ActiveMQ (一)--JMS基本概念

    摘要:The Java Message Service (JMS) API is a messaging standard that allows application components bas ...

  6. 消息队列ActiveMQ的使用详解

    通过上一篇文章 <消息队列深入解析>,我们已经消息队列是什么.使用消息队列的好处以及常见消息队列的简单介绍. 这一篇文章,主要带大家详细了解一下消息队列ActiveMQ的使用. 学习消息队 ...

  7. java JMS消息队列

    http://blog.csdn.net/shirdrn/article/details/6362792 http://haohaoxuexi.iteye.com/blog/1893038 http: ...

  8. 开源消息总线ActiveMQ

    一.消息中间件MOM(Message-Oriented Middleware) 消息中间件是解决异步分布式系统中通讯和排队问题的中间件技术.它利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数 ...

  9. [Java] 分布式消息队列(MQ)

    概述 场景 服务解耦 削峰填谷 异步化缓冲:最终一致性/柔性事务 MQ应用思考点 生产端可靠性投递 消费端幂等:消息只能消费一次 高可用.低延迟.可靠性 消息堆积能力 可扩展性 业界主流MQ Acti ...

随机推荐

  1. GenericServlet和HttpServlet有什么区别?

    1.HttpServlet 1). 是一个 Servlet, 继承自 GenericServlet. 针对于 HTTP 协议所定制. 2). 在 service() 方法中直接把 ServletReu ...

  2. hdu 1052 Tian Ji -- The Horse Racing (田忌赛马)

    Tian Ji -- The Horse Racing Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  3. Python中最简单快捷的输出方式

    格式化输出最简单的方式之哑巴填充公式 name=ludundun age=25 print(f'hello {name},your age is {age}') 输出内容: hello ludundu ...

  4. Windows下mysql-5.7.28下载、安装、配置教程

    最近需要更换mysql数据库的版本,写一篇文章,记录一下 一.下载mysql数据库 mysql的下载共有两种,一种是zip压缩文件,另一种是msi安装程序 官方5.7版本zip压缩文件下载页面 官方5 ...

  5. 如何入侵SF服务器/充当GM刷元宝

    首要作者本人要声明一下,写下此文章技术不是教你去黑传奇SF,只是想以本文引起4F拥有者的留意方案,哈哈. 如何入侵传奇SF刷元宝,首先要温故下自己的专业技术水平. 我也非常喜欢玩游戏,但却玩得特别菜, ...

  6. Ubuntu Server 16.04 LTS上怎样安装下载安装Nginx并启动

    场景 Linux-安装 Ubuntu Server 16.04 X64(图文教程详细版): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...

  7. JS---BOM---定时器

    定时器 参数1:函数 参数2:时间---毫秒---1000毫秒--1秒 执行过程: 页面加载完毕后, 过了1秒, 执行一次函数的代码, 又过了1秒再执行函数..... 返回值就是定时器的id值   v ...

  8. DC8: Vulnhub Walkthrough

    镜像下载链接: https://www.vulnhub.com/entry/dc-8,367/#download 主机扫描: http://10.10.202.131/?nid=2%27 http:/ ...

  9. https的原理

    https目的是为了防止第三方截获信息,原理是使用非对称加密和数字证书认证传输密钥建立连接,使用密钥对称加密信息进行通讯. https建立连接的过程: 数字证书原理:

  10. Cortex-M7,A8,A9,A15与ADI的BlackFin以及SHARC的DSP性能PK

    说明:1.通过此贴让我们对M4和M7的DSP性能有个全面的认识.2.测试数据来源于DSP Concepts,对于这家公司的名字,大家可能比较陌生.我们现在用的CMSIS-DSP软件就是由ARM委托这家 ...