Java中间消息件ActiveMQ使用实例
作者:小鱼吃猫 时间:2021-10-10 14:24:21
先来说一说我们为什么要用这个东西啊!
比如,我们现在有这样了个问题要解决:
这样,我们就要用到中间消息间了
然后我们就说一下什么是中间消息间吧。
采用消息传送机制/消息队列 的中间件技术,进行数据交流,用在分布式系统的集成。
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来管理了啊
来源:https://www.cnblogs.com/Lyn4ever/p/11594830.html
标签:java,中间,消息,件,activemq
0
投稿
猜你喜欢
Spring中自动装配的4种方式
2021-08-01 16:44:41
Java生成动态版验证码的方法实例
2023-08-26 03:53:08
java数据结构和算法学习之汉诺塔示例
2021-09-28 14:46:18
实例讲解Android中ViewPager组件的一些进阶使用技巧
2023-03-02 01:02:54
通过代码快速理解Java的三种代理模式
2023-03-28 01:13:57
Android View背景选择器编写技巧
2023-09-16 21:37:43
详解android在mob平台实现qq登陆和分享
2022-04-03 08:02:26
解决java.util.NoSuchElementException异常的问题
2023-02-10 08:26:46
Java创建多线程的两种方式对比
2023-09-14 21:02:49
一文详解Spring security框架的使用
2023-06-03 22:42:09
StreamAPI多次消费一个stream代码实例
2023-10-15 19:44:09
Flutter 仿微信支付界面
2023-08-30 01:31:53
Android开发使用Handler的PostDelayed方法实现图片轮播功能
2023-10-20 04:37:42
关于jdk9、jdk10、jdk11、jdk12、jdk13新特性说明
2021-07-19 17:06:34
Android开发之开关按钮控件ToggleButton简单用法示例
2022-12-30 22:05:43
java如何获取map中value的最大值
2023-04-11 05:12:04
java转树形结构工具类详解
2021-07-26 04:00:08
Java 多线程并发ReentrantLock
2022-02-23 11:53:23
Win10系统下配置java环境变量的全过程
2023-10-13 12:09:50
Java魔法堂之调用外部程序的方法
2023-11-09 07:14:16