JMS学习二(简单的ActiveMQ实例)
下载安装ActiveMQ服务下载地址当然可以去官网下载ActiveMQActiveMQ安装很简单下载解压后到bin目录就有win32 和win64两个目录按照自己的系统进入后就有activemq.bat来启动ActiveMQ服务一、点对点消息模型实例1使用queue作为目的之1、消息发送端package mqtest1; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.DeliveryMode; import javax.jms.JMSException; import javax.jms.MessageProducer; import javax.jms.Queue; import javax.jms.Session; import javax.jms.TextMessage; import org.apache.activemq.ActiveMQConnectionFactory; public class Producer { public static void main(String[] args) { int i 0; //链接工厂 ActiveMQConnectionFactory connectionFactory null; //链接对象 Connection connection null; //会话 Session session null; //队列目的地、生产者发送消息的目的地 Queue queue null; //消息生产者 MessageProducer producer null; connectionFactory new ActiveMQConnectionFactory(admin,admin,tcp://192.168.1.120:61616); try { connection connectionFactory.createConnection(); connection.start(); //第一个参数是否开启事务 true开启 ,false不开启事务如果开启记得手动提交 //参数二表示的是签收模式一般使用的有自动签收和客户端自己确认签收 session connection.createSession(true, Session.AUTO_ACKNOWLEDGE); queue session.createQueue(test_queue); //为队列创建消息生产者 producer session.createProducer(queue); //消息是否为持久性的这个不设置也是可以的默认是持久的 //producer.setDeliveryMode(DeliveryMode.PERSISTENT); //消息设置为持久的发送后及时服务关闭了再次开启消息也不会丢失。 //producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); //发送后如果服务关闭再次开启则消息会丢失。 while (true){ //创建消息 TextMessage message session.createTextMessage(); message.setText(测试队列消息i); //发送消息到目的地 producer.send(message); i; if(i10) { break; } } session.commit(); System.out.println(呵呵消息发送结束); } catch (JMSException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { //释放资源 //producer.close(); //session.close(); //connection.close(); } } }2、消息消费端package mqtest1; import javax.jms.Connection; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageConsumer; import javax.jms.MessageListener; import javax.jms.MessageProducer; import javax.jms.Queue; import javax.jms.Session; import javax.jms.TextMessage; import org.apache.activemq.ActiveMQConnectionFactory; public class Receive { public static void main(String[] args) { // 链接工厂 ActiveMQConnectionFactory connectionFactory null; // 链接对象 Connection connection null; // 会话 Session session null; // 队列目的地消费者消费消息的地方 Queue queue null; // 消息消费者 MessageConsumer consumer null; connectionFactory new ActiveMQConnectionFactory(admin, admin, tcp://192.168.1.120:61616); try { connection connectionFactory.createConnection(); connection.start(); // 创建session是的true 和false session connection.createSession(false, Session.AUTO_ACKNOWLEDGE); queue session.createQueue(test_queue); // 队列目的地消费者消费消息的地方 consumer session.createConsumer(queue); // 消息消费者 // Message message consumer.receive(); //同步方式接收 consumer.setMessageListener(new MessageListener() { Override public void onMessage(Message message) { TextMessage textMessage (TextMessage) message; try { String value textMessage.getText(); System.out.println(value: value); } catch (JMSException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); } catch (JMSException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }2点对点模型Destination作为目的地1、消息发送端package mq; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.DeliveryMode; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.MessageProducer; import javax.jms.Queue; import javax.jms.Session; import javax.jms.Topic; import org.apache.activemq.ActiveMQConnectionFactory; public class TestMQ { public static void main(String[] args) { int i 0; //链接工厂 ConnectionFactory connectionFactory null; // 链接对象 Connection connection null; // 会话对象 Session session null; // 目的地 Destination destination null; // 消息生产者 MessageProducer producer null; connectionFactory new ActiveMQConnectionFactory(admin,admin,tcp://192.168.1.120:61616); try { connection connectionFactory.createConnection(); connection.start(); //第一个参数是否开启事务 true开启 ,false不开启事务如果开启记得手动提交 //参数二表示的是签收模式一般使用的有自动签收和客户端自己确认签收 session connection.createSession(false, Session.AUTO_ACKNOWLEDGE); destination session.createQueue(test-queue); //为目的地创建消息生产者 producer session.createProducer(destination); //消息是否为持久性的这个不设置也是可以的默认是持久的 producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); while(true) { TestBean tbean new TestBean(); tbean.setAge(25); tbean.setName(hellojava i); producer.send(session.createObjectMessage(tbean)); i; if( i10) { break; } } System.out.println(呵呵消息已发送); } catch (JMSException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { producer.close(); session.close(); connection.close(); } catch (JMSException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }2、消息消费端package mq; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageConsumer; import javax.jms.MessageListener; import javax.jms.ObjectMessage; import javax.jms.Queue; import javax.jms.Session; import org.apache.activemq.ActiveMQConnectionFactory; public class AcceptMq { public static void main(String[] args) { ConnectionFactory connectionFactory; // Connection JMS 客户端到JMS Provider 的连接 Connection connection null; // Session 一个发送或接收消息的线程 Session session null; // Destination 消息的目的地;消息发送给谁. Destination destination null; // 消费者消息接收者 //MessageConsumer consumer null; connectionFactory new ActiveMQConnectionFactory(admin, admin, tcp://192.168.1.120:61616); try { //通过工厂创建链接 connection connectionFactory.createConnection(); //启动链接 connection.start(); //创建会话 session connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE); //消息目的地 destination session.createQueue(test-queue); //消息消费者 MessageConsumer consumer session.createConsumer(destination); //同步方式接受信息,如果还没有获取到则会阻塞直到接收到信息 /*Message messages consumer.receive(); TestBean value (TestBean)((ObjectMessage)messages).getObject(); String name value.getName();*/ consumer.setMessageListener(new MessageListener(){ Override public void onMessage(Message message){ try { TestBean tbean (TestBean)((ObjectMessage)message).getObject(); System.out.println(tbean: tbean); if(null ! message) { System.out.println(收到信息1 tbean.getName()); } } catch (JMSException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); } catch (JMSException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }3、bean 类package mq; import java.io.Serializable; public class TestBean implements Serializable{ private int age; private String name; public TestBean() {}; public TestBean(int age, String name) { this.age age; this.name name; } public int getAge() { return age; } public void setAge(int age) { this.age age; } public String getName() { return name; } public void setName(String name) { this.name name; } }二、发布/订阅消息模型实例1、消息发布端package mq; import javax.jms.Connection; import javax.jms.DeliveryMode; import javax.jms.JMSException; import javax.jms.MessageProducer; import javax.jms.Session; import javax.jms.TextMessage; import javax.jms.Topic; import org.apache.activemq.ActiveMQConnectionFactory; public class PSMQ { public static void main(String[] args) throws JMSException { ActiveMQConnectionFactory factory new ActiveMQConnectionFactory(admin,admin,tcp://192.168.1.101:61616); Connection connection factory.createConnection(); connection.start(); Session session connection.createSession(false, Session.AUTO_ACKNOWLEDGE); //创建话题 Topic topic session.createTopic(myTopic.messages); //为话题创建消息生产者 MessageProducer producer session.createProducer(topic); producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); while(true) { TextMessage message session.createTextMessage(); message.setText(message_ System.currentTimeMillis()); producer.send(message); System.out.println(Sent message: message.getText()); } } }2、消息订阅端package mq; import javax.jms.Connection; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageConsumer; import javax.jms.Session; import javax.jms.TextMessage; import javax.jms.Topic; import javax.jms.MessageListener; import org.apache.activemq.ActiveMQConnectionFactory; public class PSAccept { public static void main(String[] args) throws JMSException { ActiveMQConnectionFactory factory new ActiveMQConnectionFactory(admin,admin,tcp://192.168.1.101:61616); Connection connection factory.createConnection(); connection.start(); Session session connection.createSession(false, Session.AUTO_ACKNOWLEDGE); //创建话题 Topic topic session.createTopic(myTopic.messages); //为话题创建消费者 MessageConsumer consumer session.createConsumer(topic); consumer.setMessageListener(new MessageListener() { Override public void onMessage(Message message) { TextMessage tm (TextMessage) message; try { System.out.println(Received message: tm.getText()); } catch (JMSException e) { e.printStackTrace(); } } }); } }点对点消息模型和发布/订阅消息模型两种方式其实不同的就是使用队列、还是使用话题创建目的地不同其他的都一样。connectionFactory new ActiveMQConnectionFactory(admin,admin,tcp://192.168.1.120:61616);其中第一个admin是用户名第二个是密码而第三个参数就是协议ipport(端口)这几个参数两个客户端都是一样的不然消费端就获取不到了……在消息消费者中我们接收消息有两种方式即同步接收和异步接收同步接受就是使用receive()方法来接受而异步就是设置一个监听对象。说到密码我们顺便来看看ActiveMQ访问密码的设置三、ActiveMQ访问密码设置在ActiveMQ的conf目录的activemq.xml中添加账号密码plugins simpleAuthenticationPlugin users authenticationUser usernamewhd password123 groupsusers,admins/ /users /simpleAuthenticationPlugin /pluginsactivemq.xml中添加位置ok这样我们对这个ActiveMQ设置了一个用户名密码所以在创建链接的时候要修改admin这个默认的用户名密码为修改后的用户名密码。connectionFactory new ActiveMQConnectionFactory(whd, 123,tcp://192.168.0.104:61616);这样我们就能正常的向服务器发送消息而消费端也能从服务商消费消息了……差点忘了还有一个ActiveMQ管理页面地址http://127.0.0.1:8161/admin/ 访问这个地址登陆管理页面默认用户名密码都是admingithub源码地址

相关新闻

XSS漏洞攻防实战:从原理到BeEF攻击与自动化Fuzz测试

XSS漏洞攻防实战:从原理到BeEF攻击与自动化Fuzz测试

1. 项目概述与核心目标最近在跟进一个安全实战项目,核心是围绕XSS(跨站脚本)漏洞的完整攻防链条展开。这个项目标题“c13第8期 xss漏洞原理安装BlueLotus,beef-xss 安装Upload_Auto_Fuzz”看起来像是一个安全培训或实战演练的课程…

2026/7/4 18:20:17阅读更多 →
Windows本地AI引擎实测:vLLM、Ollama、llama.cpp五款对比

Windows本地AI引擎实测:vLLM、Ollama、llama.cpp五款对比

1. 本地AI引擎怎么选?这问题我踩过坑、烧过卡、重装过七次系统“本地AI引擎怎么选”——这句话最近三个月在我自己的技术笔记里出现了47次,每次后面都跟着一串问号和显存报警截图。不是理论派空谈,是实打实被显存跑炸了、被Ollama下载卡在98%…

2026/7/4 18:20:17阅读更多 →
AOA算法优化SVR参数实战:30秒降低MSE至0.007

AOA算法优化SVR参数实战:30秒降低MSE至0.007

1. 算数优化算法AOA与SVR回归预测实战解析作为一名长期奋战在机器学习一线的算法工程师,我深知调参的痛苦。特别是使用支持向量回归(SVR)时,RBF核的参数组合(C, gamma, epsilon)常常让人抓狂。传统的网格搜索(GridSearchCV)不仅耗时,还容易陷…

2026/7/4 18:20:17阅读更多 →
2026 年 6 月 GitHub 十大热门项目排行榜

2026 年 6 月 GitHub 十大热门项目排行榜

欢迎来到 2026 年 6 月 GitHub 热门开源项目排行榜!本期从月榜约 20 个候选中精选十个最有长期跟进价值的项目,横跨 全网信息接入、Agent 视频制片、输出品味 Skill、代码图谱 MCP、Mac 容器基建、PM 技能市场、开源剪辑 与 多 Agent 舰队编排 等方向。它…

2026/7/4 19:35:25阅读更多 →
抖音无水印下载器终极指南:5大场景+3种方法快速保存高清视频

抖音无水印下载器终极指南:5大场景+3种方法快速保存高清视频

抖音无水印下载器终极指南:5大场景3种方法快速保存高清视频 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback …

2026/7/4 19:35:25阅读更多 →
QWidget的窗口动画,Qt窗口各种动画效果合集,包括透明度、放大、缩小、上下左右平移等。

QWidget的窗口动画,Qt窗口各种动画效果合集,包括透明度、放大、缩小、上下左右平移等。

#ifndef ANIMATIONWIDGET_H#define ANIMATIONWIDGET_H #include <QMainWindow> #include <QWidget> #include <QPushButton> #include <QDesktopWidget> // 动画窗口 class AnimationWidget : public QWidget{ Q_OBJECTpublic: explicit Animation…

2026/7/4 19:35:25阅读更多 →
如何用BilibiliDown三步搞定B站视频下载?小白也能掌握的完整指南

如何用BilibiliDown三步搞定B站视频下载?小白也能掌握的完整指南

如何用BilibiliDown三步搞定B站视频下载&#xff1f;小白也能掌握的完整指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader &#x1f633; 项目地址: https://gitcode.com/gh…

2026/7/4 19:35:25阅读更多 →
【OpenHarmony/HarmonyOs 】实验室首页细节拆解:分类侧栏、搜索筛选与推荐探索交互

【OpenHarmony/HarmonyOs 】实验室首页细节拆解:分类侧栏、搜索筛选与推荐探索交互

【OpenHarmony/HarmonyOs 】实验室首页细节拆解&#xff1a;分类侧栏、搜索筛选与推荐探索交互本文基于我的 OpenHarmony/HarmonyOS 项目「物理视界 PhysicsVision」整理。实验室首页是整个应用的核心入口&#xff0c;它承载了 28 个物理模型的分类展示、年级筛选、关键词搜索、…

2026/7/4 19:35:25阅读更多 →
阿根廷VS佛得角美加墨世界杯超级大黑马能否挑落梅西战平潘帕斯?

阿根廷VS佛得角美加墨世界杯超级大黑马能否挑落梅西战平潘帕斯?

世界杯三十二强淘汰赛阿根廷VS佛得角&#xff0c;北京时间7月4日早上6点在迈阿密硬石体育场开赛。本场是卫冕冠军对阵非洲黑马的经典对决&#xff0c;两队整体实力、大赛底蕴差距悬殊&#xff0c;也是本届世界杯淘汰赛看点十足的强弱对话。小组赛阶段两队晋级表现截然不同。阿根…

2026/7/4 19:30:24阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月&#xff0c;Boris Cherny 公开宣布自己卸载了 IDE。一时间&#xff0c;Vibe Coding 成了全行业最热的话题。6个月后&#xff0c;当我们回过头来拉一份真实账本&#xff0c;发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/7/4 14:25:39阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言&#xff1a;审计结束三个月了&#xff0c;审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间&#xff0c;内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中&#xff0c;审计…

2026/7/4 14:57:00阅读更多 →
端到端自动驾驶:从GTC‘26看工程可信落地的核心逻辑

端到端自动驾驶:从GTC‘26看工程可信落地的核心逻辑

1. 项目概述&#xff1a;当算法工程师走进GTC26展厅&#xff0c;看到的不是芯片&#xff0c;而是“端到端”的呼吸节奏“端到端”这三个字&#xff0c;在GTC’26现场出现的频率&#xff0c;高得像NVLink带宽测试时的峰值曲线——它不再是一个论文里的技术路径选项&#xff0c;而…

2026/7/4 0:02:48阅读更多 →
缺牙修复科普:常见义齿类型与选择参考

缺牙修复科普:常见义齿类型与选择参考

缺牙修复科普&#xff1a;常见义齿类型与选择参考牙齿缺失是中老年人群中较为常见的口腔问题&#xff0c;不仅会造成咀嚼不便、进食受影响&#xff0c;长期还可能对营养摄入与日常社交带来困扰。义齿是改善缺牙问题的常用方式&#xff0c;目前市面上的义齿种类较多&#xff0c;…

2026/7/4 0:02:48阅读更多 →
STM32F091RC与LTC6904实现高精度方波信号生成

STM32F091RC与LTC6904实现高精度方波信号生成

1. 项目概述&#xff1a;LTC6904与STM32F091RC的精准方波生成方案在嵌入式系统开发中&#xff0c;精确的时钟信号和定时控制往往是项目成败的关键。LTC6904作为一款低功耗、高精度的可编程振荡器芯片&#xff0c;与STM32F091RC这款ARM Cortex-M0内核微控制器的组合&#xff0c;…

2026/7/4 0:02:48阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时&#xff0c;发现推理速度只有可怜的 1-2 FPS&#xff0c;而别人的演示视频却能跑到 30 FPS 以上&#xff0c;那么问题很可能不在模型本身&#xff0c;而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后&#xff0c;会直接使用官方示例…

2026/7/4 1:16:56阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一&#xff1a;为什么你需要了解 Coze 和 Dify&#xff1f;如果你对 AI 应用开发感兴趣&#xff0c;但一看到“大模型”、“智能体”、“工作流”这些词就头疼&#xff0c;觉得门槛太高&#xff0c;那这篇文章就是为你准备的。很多开发者&#xff0c;包括我自己&#…

2026/7/4 2:33:55阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会&#xff1a;配图一直是个让人头疼的问题。2026年&#xff0c;AI生图工具已经非常成熟了&#xff0c;但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1&#xff1a;速度之王2026年6月11日&#xff0c…

2026/7/4 2:33:55阅读更多 →