Java中间消息件——ActiveMQ入门级运用
先来说一说我们为什么要用这个东西啊!
比如,我们现在有这样了个问题要解决:

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

然后我们就说一下什么是中间消息间吧。
采用消息传送机制/消息队列 的中间件技术,进行数据交流,用在分布式系统的集成。
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入门级运用的更多相关文章
- java之消息队列ActiveMQ实践
原创论文:https://www.cnblogs.com/goujh/p/8510239.html 消息队列的应用场景: 消息队列应用场景 异步处理,应用解耦,流量削锋和消息通讯四个场景 异步处理: ...
- java 框架-消息队列ActiveMQ
https://www.jianshu.com/p/ecdc6eab554c ActiveMQ从入门到精通(一) 22017.03.11 21:40:42字数 2650阅读 57286 这是关于消息中 ...
- java 消息机制 ActiveMQ入门实例
1.下载ActiveMQ 去官方网站下载:http://activemq.apache.org/ 我下载的时候是 ActiveMQ 5.14.0 Release版 2.运行ActiveMQ 解压缩ap ...
- Java消息机制 ActiveMQ入门实例
转载自:http://www.cnblogs.com/wyh3721/p/5917316.html 1.下载ActiveMQ 去官方网站下载:http://activemq.apache.org/ ...
- Java消息队列ActiveMQ (一)--JMS基本概念
摘要:The Java Message Service (JMS) API is a messaging standard that allows application components bas ...
- 消息队列ActiveMQ的使用详解
通过上一篇文章 <消息队列深入解析>,我们已经消息队列是什么.使用消息队列的好处以及常见消息队列的简单介绍. 这一篇文章,主要带大家详细了解一下消息队列ActiveMQ的使用. 学习消息队 ...
- java JMS消息队列
http://blog.csdn.net/shirdrn/article/details/6362792 http://haohaoxuexi.iteye.com/blog/1893038 http: ...
- 开源消息总线ActiveMQ
一.消息中间件MOM(Message-Oriented Middleware) 消息中间件是解决异步分布式系统中通讯和排队问题的中间件技术.它利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数 ...
- [Java] 分布式消息队列(MQ)
概述 场景 服务解耦 削峰填谷 异步化缓冲:最终一致性/柔性事务 MQ应用思考点 生产端可靠性投递 消费端幂等:消息只能消费一次 高可用.低延迟.可靠性 消息堆积能力 可扩展性 业界主流MQ Acti ...
随机推荐
- springboot整合axis1.4搭建服务端
前言 最近公司要开发个接口,要用webservices接口实现,而且使用的是axis1.4框架,webservices和axis这两个东西我之前都没接触过,而且axis1.4这个框架06年就不再维护了 ...
- 牛客练习赛32B Xor Path (树形dp)
时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 给定一棵n个点的树,每个点有权值.定义表示 ...
- 线程中put(None)和主函数中put(None)的区别和用法
''' 初试生产者消费者模型代码 分析: 对象含有生产者.队列.消费者 Queue队列模块,不适合传大文件,通常传一些消息. ''' '''多生产者进程和多消费者进程''' #导入模块 from mu ...
- ClassNotFoundException------IDEA下的一种原因
由于直接复制文件而未经过IDE造成次异常,需要修改程序入口:
- 《Java知识应用》Java加密方式(MD5)详解
1. 应用 使用MD5加密 因为:因为MD5的不可逆性,也可以保证你的key 是安全的,黑客无法通过原文和密文知晓你的key. 案例: import java.math.BigInteger; imp ...
- java基础集合简介Map(三)下
--Map接口简介 今天来看一看map集合,map映射接口,用于存放键值对,<key,value>,通过key来查找value,顾名思义key不能为空,唯一且不重复,不然底层怎么查呢! 可 ...
- 【CV现状-1】磨染的初心——计算机视觉的现状:缘起
#磨染的初心--计算机视觉的现状 [这一系列文章是关于计算机视觉的反思,希望能引起一些人的共鸣.可以随意传播,随意喷.所涉及的内容过多,将按如下内容划分章节.已经完成的会逐渐加上链接.] 缘起 三维感 ...
- WPF特点
前言:为什么要学习WPF呢?因为随着现阶段硬件技术的升级以及客户对体验的要求越来越高,传统的GDI和USERS(或者是GDI+.USERS)已经不能满足这个需求,因此,WPF技术应运而生. WPF的特 ...
- DevExpress的LookUpEdit怎样不显示列名
场景 DevExpress的下拉框控件LookUpEdit的使用.添加item选项值.修改默认显示值: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/articl ...
- leetcode菜鸡斗智斗勇系列(3)--- Jewels and Stones珠宝和钻石
1.原题: https://leetcode.com/problems/jewels-and-stones/ You're given strings J representing the types ...