ActiveMQ介绍与安装
ActiveMQ介绍
什么是ActiveMQ
ActiveMQ 是Apache软件基金会出品的一款流行且功能强大的开源消息中间件,作为JMS Provider实现了对JMS1.1和J2EE 1.4规范的全面支持。尽管JMS规范已存在较长时间,但在现代J2EE应用中仍占据重要地位。
主要特点:
- 支持多种编程语言和应用协议开发客户端:
- 语言:Java, C, C++, C#, Ruby, Perl, Python, PHP
- 应用协议:OpenWire, Stomp, REST, WS Notification, XMPP, AMQP
- 完全遵循JMS1.1和J2EE 1.4规范,支持持久化消息、XA事务处理。
- 良好的Spring框架集成,可轻松嵌入使用Spring的应用系统,并支持Spring2.0特性。
- 经过主流J2EE服务器(如 Geronimo, JBoss 4, GlassFish, WebLogic)验证,通过JCA 1.5 resource adaptors配置,ActiveMQ可以自动部署到任何兼容J2EE 1.4的商业服务器上。
- 支持多种传输协议:in-VM, TCP, SSL, NIO, UDP, JGroups, JXTA。
- 提供通过JDBC和journal实现的高速消息持久化功能。
- 设计上确保了高性能集群、客户端-服务器模型及点对点消息传递。
- 支持Ajax技术。
- 可与Axis整合。
- 易于调用内嵌JMS Provider进行测试。
1.2 JMS介绍
JMS(Java Message Service)全称为Java消息服务,是一种Java平台的标准API,用于在分布式系统中的应用程序间异步地发送和接收消息。
在实际业务场景中,JMS用于在生产者和消费者之间传递消息。生产者负责生成消息并发送,消费者则负责接收并处理消息。消息传递有两种基本模式:
- 点对点(P2P):一个生产者与一个消费者一对一匹配。
- 发布/订阅(Pub/Sub):一个生产者发布消息后,可以被多个消费者同时接收。
JMS定义了五种不同类型的消息正文格式和消息类型:
- StreamMessage:包含Java原始值的数据流
- MapMessage:一组名称-值对
- TextMessage:一个字符串对象
- ObjectMessage:一个序列化的Java对象
- BytesMessage:一个字节数据流
ActiveMQ的安装
2.1 下载
请访问官方网站 https://activemq.apache.org/components/classic/download/
下载ActiveMQ。
2.2 安装步骤
-
安装JDK
- 确保安装了JDK1.7或更高版本。
-
解压ActiveMQ
- 将下载后的ActiveMQ压缩包进行解压。
-
配置ActiveMQ生产者消费者密码以及队列权限
在ActiveMQ的配置文件activemq.xml
中,为了设置生产者和消费者的用户名密码,您可以在<broker>
元素内部加入 <plugins>
配置段落.
其中包含 <simpleAuthenticationPlugin>
插件,具体配置如下:
<!-- 在broker节点内增加插件配置 -->
<broker xmlns="http://activemq.apache.org/schema/core" ... >
...
<!-- 插入身份验证插件配置 -->
<plugins>
<simpleAuthenticationPlugin>
<users>
<!-- 添加一个用户及其组别 -->
<authenticationUser username="aq" password="wstv1232131" groups="users,admins"/>
</users>
</simpleAuthenticationPlugin>
<!-- 如果需要授权控制,可以配合 simpleAuthorizationPlugin 使用 -->
<simpleAuthorizationPlugin>
<authorizationEntries>
<!-- 示例授权规则,允许属于 'users' 和 'admins' 组的用户访问名为 'exampleQueue' 的队列 -->
<authorizationEntry queue=">" write="admins" read="users" admin="admins" />
<!-- 更多授权规则可以在这里添加 -->
</authorizationEntries>
</simpleAuthorizationPlugin>
</plugins>
...
</broker>
queue=">"
> 为通配符 所有队列,如需只授权某个队列,则配置为:queue="exampleQueue"
在这个配置中,我们为ActiveMQ添加了一个用户名为wstv
、密码为wstv1232131
的用户,并将其分配给了users
和admins
两个组。
这意味着后续使用这个用户名和密码连接到ActiveMQ的生产者和消费者将受到相应的身份验证和可能的授权控制。
4. 配置ActiveMQ持久化方式
在Apache ActiveMQ中配置持久化方式是为了确保即使在消息中间件(broker)重启后,消息依然能够被保存并重新分发给消费者。
ActiveMQ提供了多种持久化机制,其中包括KahaDB、JDBC、LevelDB等。以下是使用KahaDB作为持久化方式的配置示例:
在ActiveMQ的配置文件conf/activemq.xml
中找到<broker>
元素,并在其内部添加或修改持久化插件配置:
<broker xmlns="http://activemq.apache.org/schema/core"
brokerName="yourBrokerName"
dataDirectory="/path/to/your/data/directory">
<!-- 默认情况下,ActiveMQ 5.x 使用 KahaDB 持久化 -->
<persistenceAdapter>
<kahaDB directory="${activemq.data}/kahadb"/>
</persistenceAdapter>
<!-- 其他 broker 配置 -->
</broker>
!> 注意 这里开启了持久化之后,对应自己的Spring程序中也需要配置同步消息的方式
在上述配置中:
dataDirectory
属性指定了存放所有数据,包括KahaDB在内的根目录。<kahaDB>
元素定义了使用KahaDB作为持久化适配器,并通过directory
属性指定了KahaDB数据库的具体位置。
如果想使用JDBC持久化,可以配置MySQL、PostgreSQL等关系型数据库,配置示例如下:
首先需要把MySql的驱动以及数据连接池jar 放到ActiveMQ的Lib目录下,
mysql-connector-java-5.1.27.jar
druid-1.0.29.jar
的是阿里的数据源
<persistenceAdapter>
<jdbcPersistenceAdapter dataDirectory="${activemq.base}/data" dataSource="#yourDataSource">
<!-- 其他JDBC持久化相关配置 -->
</jdbcPersistenceAdapter>
</persistenceAdapter>
该配置文件中的broker节点外增加以下代码(yourDataSource)
<bean id="activemq" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost/activemq?relaxAutoCommit=true"/>
<property name="username" value="your_mysql_username"/>
<property name="password" value="your_mysql_password"/>
<property name="maxActive" value="200"/>
<property name="maxWait" value="60000"/>
</bean>
oracle的配置和mysql一样,在Lib目录下,放入oracle的驱动包,然后配置一下配置文件即可。
对于不同的持久化方式,需要根据ActiveMQ官方文档提供的详细配置指南进行设置。
同时,要注意配置好数据库连接池、驱动以及其他必要的属性。
对于JDBC持久化,可能还需要额外的数据库表结构初始化步骤。
记得重启ActiveMQ服务以使配置生效。
当客户端尝试连接到ActiveMQ时,需要使用这些凭证来创建连接工厂,例如:
String userName = "wstv";
String password = "wstv1232131";
ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
factory.setUserName(userName);
factory.setPassword(password);
Connection connection = factory.createConnection();
connection.start();
在上述Java代码片段中,客户端将使用配置的用户名和密码连接到ActiveMQ服务器。
5. 启动与停止服务
- 进入解压后ActiveMQ的
bin
目录下。- 启动服务:
[root@localhost bin]# ./activemq start
- 停止服务:
[root@localhost bin]# ./activemq stop
- 启动服务:
6. 访问后台管理界面
- 打开浏览器,输入后台管理地址:
http://192.168.25.168:8161/admin
- 登录凭据:
- 用户名:admin
- 密码:admin
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库