ActiveMQ
ActiveMQ
安装
下载网址:ActiveMQ
一定要和自己安装的jdk版本匹配,不然会报错

下载到本地之后解压缩


有可能端口号被占用

解除端口号占用,参考:Windows_端口被占用
打开cmd
查询所有的端口号
netstat -nao

查询指定端口号
netstat -ano|findstr 5672
查询什么程序在占用
tasklist | findstr "4756"

打开任务管理器看看这个程序

erl.exe是什么进程
Erlang 的执行程序,Erlang一种编程语言,多用于并发和分布式系统,现在最广泛使用在消息队列里面。
安装RabbitMQ的好像就是安装的这个,看来是RabbitMQ把这个端口给占用掉了,换个端口号

将5672改成55672

网址:http://localhost:8161/admin/
用户名:admin
密码:admin

成功。
使用
参考:消息队列之 ActiveMQ

Java访问ActiveMQ实例

引入依赖
<dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-all</artifactId><version>5.15.2</version></dependency>
消息生产者
package mq.activeMQ;import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;import javax.jms.*;public class TopicPublisher {/*** 默认用户名*/public static final String USERNAME = ActiveMQConnection.DEFAULT_USER;/*** 默认密码*/public static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;/*** 默认连接地址*/public static final String BROKER_URL = ActiveMQConnection.DEFAULT_BROKER_URL;public static void main(String[] args) {//创建连接工厂ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(USERNAME, PASSWORD, BROKER_URL);try {//创建连接Connection connection = connectionFactory.createConnection();//开启连接connection.start();//创建会话,不需要事务Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);//创建 Topic,用作消费者订阅消息Topic myTestTopic = session.createTopic("activemq-topic-test1");//消息生产者MessageProducer producer = session.createProducer(myTestTopic);for (int i = 1; i <= 3; i++) {TextMessage message = session.createTextMessage("发送消息 " + i);producer.send(myTestTopic, message);}//关闭资源session.close();connection.close();} catch (JMSException e) {e.printStackTrace();}}
}
消息消费者
package mq.activeMQ;import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;import javax.jms.*;public class TopicSubscriber {/*** 默认用户名*/public static final String USERNAME = ActiveMQConnection.DEFAULT_USER;/*** 默认密码*/public static final String PASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;/*** 默认连接地址*/public static final String BROKER_URL = ActiveMQConnection.DEFAULT_BROKER_URL;public static void main(String[] args) {//创建连接工厂ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(USERNAME, PASSWORD, BROKER_URL);try {//创建连接Connection connection = connectionFactory.createConnection();//开启连接connection.start();//创建会话,不需要事务Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);//创建 TopicTopic myTestTopic = session.createTopic("activemq-topic-test1");MessageConsumer messageConsumer = session.createConsumer(myTestTopic);messageConsumer.setMessageListener(new MessageListener() {@Overridepublic void onMessage(Message message) {try {System.out.println("消费者1 接收到消息:" + ((TextMessage) message).getText());} catch (JMSException e) {e.printStackTrace();}}});MessageConsumer messageConsumer2 = session.createConsumer(myTestTopic);messageConsumer2.setMessageListener(new MessageListener() {@Overridepublic void onMessage(Message message) {try {System.out.println("消费者2 接收到消息:" + ((TextMessage) message).getText());} catch (JMSException e) {e.printStackTrace();}}});MessageConsumer messageConsumer3 = session.createConsumer(myTestTopic);messageConsumer3.setMessageListener(new MessageListener() {@Overridepublic void onMessage(Message message) {try {System.out.println("消费者3 接收到消息:" + ((TextMessage) message).getText());} catch (JMSException e) {e.printStackTrace();}}});//让主线程休眠100秒,使消息消费者对象能继续存活一段时间从而能监听到消息Thread.sleep(100 * 1000);//关闭资源session.close();connection.close();} catch (Exception e) {e.printStackTrace();}}
}
gitee:JAVA集成AcitveMQ
启动ActiveMQ服务器

启动

Spring整合ActiveMQ
引入依赖
<dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-all</artifactId><version>5.15.2</version>
</dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jms</artifactId><version>4.3.10.RELEASE</version>
</dependency><dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-pool</artifactId><version>5.15.0</version>
</dependency>
Spring配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.0.xsd"><!--这里要改base-package="基础包"--><!--下面还有要改的,看注释--><context:component-scan base-package="com.example.spring_activemq.activeMQ"/><!--连接池--><bean id="jmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop"><property name="connectionFactory"><bean class="org.apache.activemq.ActiveMQConnectionFactory"><property name="brokerURL"><value>tcp://localhost:61616</value></property></bean></property><property name="maxConnections" value="100"></property></bean><!--缓存--><bean id="cachingConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory"><property name="targetConnectionFactory" ref="jmsFactory"/><property name="sessionCacheSize" value="1"/></bean><bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"><!--获取连接、会话等对象--><property name="connectionFactory" ref="cachingConnectionFactory"/><!--消息转换器--><property name="messageConverter"><bean class="org.springframework.jms.support.converter.SimpleMessageConverter"/></property></bean><!--实际发送和接收消息的目的地--><bean id="testQueue" class="org.apache.activemq.command.ActiveMQQueue"><constructor-arg name="name" value="spring-queue"/></bean><bean id="testTopic" class="org.apache.activemq.command.ActiveMQTopic"><constructor-arg index="0" value="spring-topic"/></bean><!--这里也要改class=""--><!--队列消息下的监视器--><bean id="queueListener" class="com.example.spring_activemq.activeMQ.QueueListener"/><!--主题模式下的接收器--><bean id="topic1Listener" class="com.example.spring_activemq.activeMQ.Topic1Listener"/><bean id="topic2Listener" class="com.example.spring_activemq.activeMQ.Topic2Listener"/><!--将消息监视器绑定到具体的消息目的地上--><bean id="queueContainer"class="org.springframework.jms.listener.DefaultMessageListenerContainer"><property name="connectionFactory" ref="cachingConnectionFactory"/><property name="destination" ref="testQueue"/><property name="messageListener" ref="queueListener"/></bean><bean id="topic1Container"class="org.springframework.jms.listener.DefaultMessageListenerContainer"><!--缓存--><property name="connectionFactory" ref="cachingConnectionFactory"/><!--目的地--><property name="destination" ref="testTopic"/><!--监视器--><property name="messageListener" ref="topic1Listener"/></bean><bean id="topic2Container"class="org.springframework.jms.listener.DefaultMessageListenerContainer"><property name="connectionFactory" ref="cachingConnectionFactory"/><property name="destination" ref="testTopic"/><property name="messageListener" ref="topic2Listener"/></bean></beans>
消息服务类
package com.example.spring_activemq.activeMQ;import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.stereotype.Service;import javax.annotation.Resource;
import javax.jms.*;@Service
public class MessageService {@Resource(name = "jmsTemplate")private JmsTemplate jmsTemplate;@Resource(name = "testQueue")private Destination testQueue;@Resource(name = "testTopic")private Destination testTopic;//向队列发送消息public void sendQueueMessage(String messageContent) {jmsTemplate.send(testQueue, new MessageCreator() {@Overridepublic Message createMessage(Session session) throws JMSException {TextMessage msg = session.createTextMessage();// 设置消息内容msg.setText(messageContent);return msg;}});}//向主题发送消息public void sendTopicMessage(String messageContent) {jmsTemplate.send(testTopic, new MessageCreator() {@Overridepublic Message createMessage(Session session) throws JMSException {TextMessage msg = session.createTextMessage();// 设置消息内容msg.setText(messageContent);return msg;}});}
}
消息监听器类
队列监听器
package com.example.spring_activemq.activeMQ;import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;public class QueueListener implements MessageListener {@Overridepublic void onMessage(Message message) {if (message instanceof TextMessage) {try {TextMessage txtMsg = (TextMessage) message;String messageStr = txtMsg.getText();System.out.println("队列监听器接收到文本消息:" + messageStr);} catch (JMSException e) {e.printStackTrace();}} else {throw new IllegalArgumentException("只支持 TextMessage 类型消息!");}}
}
订阅消息监听器
package com.example.spring_activemq.activeMQ;import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;public class Topic1Listener implements MessageListener {@Overridepublic void onMessage(Message message) {if (message instanceof TextMessage) {try {TextMessage txtMsg = (TextMessage) message;String messageStr = txtMsg.getText();System.out.println("主题监听器1 接收到文本消息:" + messageStr);} catch (JMSException e) {e.printStackTrace();}} else {throw new IllegalArgumentException("只支持 TextMessage 类型消息!");}}
}
package com.example.spring_activemq.activeMQ;import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;public class Topic2Listener implements MessageListener {@Overridepublic void onMessage(Message message) {if (message instanceof TextMessage) {try {TextMessage txtMsg = (TextMessage) message;String messageStr = txtMsg.getText();System.out.println("主题监听器2 接收到文本消息:" + messageStr);} catch (JMSException e) {e.printStackTrace();}} else {throw new IllegalArgumentException("只支持 TextMessage 类型消息!");}}
}
启动应用
package com.example.spring_activemq.activeMQ;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class StartApplication {public static void main(String[] args) {//这里总是显示空指针,找半天也没找出来哪里错了,不找了,等以后学学再找。ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:spring-context.xml");MessageService messageService = (MessageService) ctx.getBean("messageService");messageService.sendQueueMessage("我的测试消息1");messageService.sendTopicMessage("我的测试消息2");messageService.sendTopicMessage("我的测试消息3");}}
gitee:Spring集成ActiveMQ
相关文章:
ActiveMQ
ActiveMQ 安装 下载网址:ActiveMQ 一定要和自己安装的jdk版本匹配,不然会报错 下载到本地之后解压缩 有可能端口号被占用 解除端口号占用,参考:Windows_端口被占用 打开cmd 查询所有的端口号 netstat -nao查询指定端口号 n…...
navicat15 恢复试用方法
1.运行,输入regedit,打开注册表 2.注册表中搜索 HKEY_CURRENT_USER\Software\PremiumSoft\NavicatPremium,删除下面的Registration15XCS文件夹 3.注册表中再搜索 HKEY_CURRENT_USER\Software\Classes\CLSID 然后拉到文件夹目录的最后&#x…...
【idea】生成banner.txt
Spring Boot banner在线生成工具,制作下载英文banner.txt,修改替换banner.txt文字实现自定义,个性化启动banner-bootschool.netSpring Boot banner工具实现在线生成banner,轻松修改替换实现自定义banner,让banner.txt文…...
数据缺失值的4种处理方法
一、缺失值产生的原因 缺失值的产生的原因多种多样,主要分为机械原因和人为原因。机械原因是由于机械原因导致的数据收集或保存的失败造成的数据缺失,比如数据存储的失败,存储器损坏,机械故障导致某段时间数据未能收集(…...
如何将普通队列异常消息路由到死信队列
如何将普通队列异常消息路由到死信队列 在RabbitMQ中,我们经常需要处理异常消息,特别是当消息处理失败时。一个常见的用例是将异常消息路由到死信队列,以便稍后重新处理或进一步分析。在本篇博客中,我们将演示如何配置RabbitMQ和…...
MATLAB中perceptron函数用法
目录 语法 说明 示例 使用感知器求解简单分类问题 perceptron函数的功能是简单的单层二类分类器。 语法 perceptron(hardlimitTF,perceptronLF) 说明 注意 Deep Learning Toolbox™ 支持早期形式的感知器。为了获得更好的结果,您应改用 patternnet࿰…...
使用Python进行数据科学
数据科学是一门涉及收集、清洗、处理和分析数据的学科,而Python是一种强大的编程语言,广泛应用于数据科学领域。本文将介绍如何使用Python进行数据处理和分析的基本技术和工具。 一、数据收集 在进行数据分析之前,首先需要收集数据。Python…...
Go语言在硬件开发领域的应用
引言 Go语言是一种快速、简洁且高效的编程语言,由Google开发并于2009年发布。虽然Go语言在Web开发和后端服务方面广受欢迎,但其在硬件开发领域的应用也日益增多。本文将探讨Go语言在硬件开发中的优势和应用案例,并分析其对硬件开发的影响。 …...
小程序如何设置首选配送公司
小程序的一个重要环节就是配送服务。为了提供更好的发货体验,避免商家总是要在众多的配送公司中选择想要,小程序支持设置首选配送。下面将具体介绍一下小程序如何设置。 在小程序管理员后台->配送设置->首选配送处,指定需要设置的首选…...
聚观早报 |2024款飞凡R7官宣;小米14新配色材质
【聚观365】10月27日消息 2024款飞凡R7官宣 小米14新配色材质 金山办公2023第三季度业绩 IBM2023第三季度业绩 新东方2024财年第一季度业绩 2024款飞凡R7官宣 飞凡汽车官宣,2024款飞凡R7将于11月上市,新车将搭载飞凡巴赫座舱,同时超过1…...
【kubernetes】Debian使用Kubeadm部署Kubernetes失败:Connection Refused
这篇文章也可以在我的博客中查看 今天废话不多说直接解决一个阴间问题 问题 在部署kubernetes后(执行完kubeadm init后),执行任何kubectl命令,都会报以下错误: The connection to the server xxx.xxx.xxx.xxx:6443…...
Wpf 使用 Prism 实战开发Day02
一.设计首页导航条 导航条的样式,主要是从Material DesignThemes UI 拷贝过来修改的,项目用了这个UI组件库,就看自己需要什么,就去拷过来使用,界面布局或其他组件使用,不做介绍。 直接下载源码,编译运行就可…...
基于本体的军事术语知识图谱构建方法
源自: 智汇杰瑞 “人工智能技术与咨询” 发布 摘 要 1 军事术语知识图谱构建流程 ※ ※ ※ ※ ※ ※ ※ ※ ※ ※ ※ ※ 图1 军事术语知识图谱构建流程 2 军事术语本体构建 2.1 军事术语数据结构分析 2.2 军事术语本体设计 ※ ※ ※ ※ ※ ※ ※…...
Web APIs——事件委托
1、事件委托 事件委托(Event delegation)是一种JavaScript设计模式,用于处理事件监听和处理程序的优化。它通过将事件处理程序绑定到父元素而不是绑定到子元素,从而减少DOM元素上的事件处理程序数量。 事件委托是利用事件流的特征…...
【SpringMVC篇】讲解RESTful相关知识
🎊专栏【SpringMVC】 🍔喜欢的诗句:天行健,君子以自强不息。 🎆音乐分享【如愿】 🎄欢迎并且感谢大家指出小吉的问题🥰 文章目录 🎄REST简介🌺RESTful入门案例⭐案例一⭐…...
HTML基本概念:
HTML简介: 超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言。 1)、HTML 是用来描述网页的一种语言。 2)、HTML 不是一种编程语言&am…...
webpack编译卡住65不动,问题记录
此问题webpack没有报任何错误,导致我们只能用排除法,排除了整整一下午,为了避免又浪费一个下午时间,特此记录这个重要的问题。重启电脑也试了,清理缓存也试了,然后node_modules也重新安装了很多遍ÿ…...
当在本地,向服务器发送信息时,服务器接受信息返回给客户端,此时采用多行读取时,客户端接收不到Server的信息
public class SocketTCP04Server {public static void main(String[] args) throws IOException {ServerSocket serverSocket new ServerSocket(9999);System.out.println("Server:"serverSocket.getClass());System.out.println("正在等待用户连接.…...
2310D,Dll,栈跟踪
原文 帮助 有没有想过,如果运行时拥有调试器功能,会怎样? 对系统语言来说,常见问题是解引用空针.这几乎总是会导致崩溃,很难找到该问题,特别是你不是该项目的原始开发者时. 但是,不要害怕,在此我要讲如何在不需要实际附加调试器时获得有用的调试信息. 在Java中,已存在一个叫…...
JVS-BI数字大屏设计器:一站式解决方案
数字大屏介绍 数字大屏是当下数据展示、业务监控、指挥调度常见的业务表达形态,常有可视化的图表、效果装饰、事件操作等技术组成酷炫的效果展示。 配置入口 进入JVS-BI(bi.bctools.cn),进入大屏页面,如下图所示 ①…...
UniApp跨端开发实战:一套代码给TabBar同时穿上iOS和Material Design的“毛玻璃”外衣
UniApp跨端毛玻璃TabBar实战:融合iOS与Material Design的设计语言 在移动应用开发中,底部导航栏(TabBar)作为核心交互组件,其设计直接影响用户体验。随着iOS毛玻璃(Blur Effect)和Android Mater…...
别再复制粘贴了!手把手教你用C语言实现MODBUS CRC-16校验(附5种算法对比)
MODBUS CRC-16校验算法实战指南:从原理到最优实现选择 在工业自动化领域,MODBUS协议因其简单可靠而广泛应用,而CRC-16校验则是保障数据完整性的关键环节。许多开发者习惯直接复制网络上的校验代码,却常常遇到内存溢出、性能瓶颈或…...
2026年计算机专业就业现状,不想35岁被淘汰?网络安全或许是程序员的最佳转型方向!
计算机专业虽进入分化阶段,但网络安全人才缺口达300万,高端领域供不应求。高校扩招与市场需求脱节导致供需失衡,未来"计算机行业"的复合型人才更具竞争力。建议早做规划,构建"T型能力体系",掌握前…...
别再只会复制代码了!STM32F103 HAL库驱动RC522 RFID模块的底层SPI通信原理解析
深入解析STM32F103 HAL库驱动RC522的SPI通信机制 当开发者第一次接触RFID模块时,往往会被各种现成的驱动库所吸引——复制粘贴几行代码,模块就能工作,这确实很诱人。但当你遇到通信不稳定、数据错误或者需要优化性能时,仅靠"…...
2026年想快速提分?邵阳这些高复学校或许能帮你实现梦想!
高考失利并不意味着人生就此止步,复读是很多考生重新冲刺梦想的选择。在邵阳,有不少优秀的高复学校,今天就重点为大家介绍邵阳湘郡铭志学校高复部,同时也会提及其他一些知名高复学校,帮助大家在选择时进行对比。一、解…...
量子架构搜索:结合张量网络与强化学习的创新方法
1. 量子架构搜索的现状与挑战量子计算正经历从理论走向实践的关键转型期,但当前NISQ(噪声中等规模量子)设备的局限性给算法实现带来了严峻挑战。这些设备通常只有50-100个量子比特,且存在显著的噪声和有限的量子比特连通性。在这样…...
5分钟搞定虚拟显示器:ParsecVDD终极指南,解锁4K游戏串流新境界
5分钟搞定虚拟显示器:ParsecVDD终极指南,解锁4K游戏串流新境界 【免费下载链接】parsec-vdd ✨ Perfect virtual display for game streaming 项目地址: https://gitcode.com/gh_mirrors/pa/parsec-vdd 你是否曾经因为物理显示器限制而无法获得完…...
麦当劳中国启动2026全国招聘周招募新生代人才
美通社消息:麦当劳中国正式启动2026年全国招聘周。今年,首批年满16周岁的10后将步入职场,与00后共同构成新生代主力军。在AI的变革时代,麦当劳以"有保障、有福利、有发展"的薪酬福利成长体系,以及长期、系统…...
别再死记公式了!用Cadence Virtuoso手把手仿真折叠Cascode运放的增益与带宽
折叠Cascode运放仿真实战:从理论到波形的完整验证指南 在模拟IC设计的海洋里,折叠Cascode运算放大器就像一艘兼具速度与稳定性的快艇——它能提供高增益、宽带宽和良好的输出摆幅。但当你从教科书走向Cadence Virtuoso的仿真界面时,是否经常遇…...
Go语言事件驱动:CloudEvents
Go语言事件驱动:CloudEvents 1. CloudEvents实现 type Event struct {SpecVersion stringType stringSource stringID stringData []byte }2. 总结 CloudEvents是云原生事件的标准格式,促进跨服务的事件交互。...
