Spring+ActiveMQ+Mysql 配置JMS

本文指导如何在Spring环境中搭建并测试ActiveMQ消息中间件,包括安装、配置及发送接收消息流程,并演示如何利用Spring框架简化消息交互。
一、准备一个可以运行的Spring环境

二、下载ActiveMQ ([url=http://activemq.apache.org/]下载地址[/url])
2.1 先确保ActiveMQ运行正常,直接运行 安装目录\bin\activemq.bat即可,
[color=red]注意:如果要以服务方式运行的话,可以使用ActiveMQ 提供的工具 安装目录\bin\win32\InstallService.bat 确保以管理员方式运行[/color]
可以打开链接, ([url=http://localhost:8161/admin]http://localhost:8161/admin[/url])查看是否安装成功

三、试用
[color=blue]单独编写消息发送者和消息接受以测试相应[/color]
[size=medium]消息发送[/size]
public static void main(String[] args) throws JMSException
{
// ConnectionFactory :连接工厂,JMS 用它创建连接
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,
ActiveMQConnection.DEFAULT_PASSWORD, "tcp://localhost:61616");
// JMS 客户端到JMS Provider 的连接
Connection connection = connectionFactory.createConnection();
connection.start();
// Session: 一个发送或接收消息的线程
Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
// Destination :消息的目的地;消息发送给谁.
// 获取session注意参数值Queue.Name是Query的名字
Destination destination = session.createQueue("[color=red]Queue.Name[/color]");
// MessageProducer:消息生产者
MessageProducer producer = session.createProducer(destination);
// 设置不持久化
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
// 发送一条消息
sendMsg(session, producer);
session.commit();
connection.close();
}
/**
* 在指定的会话上,通过指定的消息生产者发出一条消息
*
* @param session 消息会话
* @param producer 消息生产者
*/
public static void sendMsg(Session session, MessageProducer producer) throws JMSException
{
// 创建一条文本消息
TextMessage message = session.createTextMessage("Hello ActiveMQ!");
// 通过消息生产者发出消息
producer.send(message);
System.out.println("");
}


[size=medium]
消息接收[/size]
public static void main(String[] args) throws JMSException
{
// ConnectionFactory :连接工厂,JMS 用它创建连接
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,
ActiveMQConnection.DEFAULT_PASSWORD, "tcp://localhost:61616");
// JMS 客户端到JMS Provider 的连接
Connection connection = connectionFactory.createConnection();
connection.start();
// Session: 一个发送或接收消息的线程
Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
// Destination :消息的目的地;消息发送给谁.
// 获取session注意参数值xingbo.xu-queue是一个服务器的queue,须在在ActiveMq的console配置
Destination destination = session.createQueue("Queue.Name");
// 消费者,消息接收者
MessageConsumer consumer = session.createConsumer(destination);
while(true)
{
TextMessage message = (TextMessage) consumer.receive(1000);
if(null != message)
System.out.println("收到消息:" + message.getText());
else
break;
}
session.close();
connection.close();
}


开启你的ActiveMQ服务器,测试一下吧。发送一个消息,然后看看接收到的成果

四、 Spring 注入
spring application.xml 文件配置
<!-- 配置JMS消息发送 -->
<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>
</bean>

<!-- Spring JMS Template -->
<bean id="myJmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory">
<ref local="jmsFactory" />
</property>
</bean>

<bean id="destination" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg index="0">
<value>Queue.Name</value>
</constructor-arg>
</bean>
<bean id="sender" class="demo.JmsQueueSender">
<property name="jmsTemplate" ref="myJmsTemplate"></property>
</bean>
<bean id="receive" class="demo.JmsQueueReceiver"></bean>

<bean id="listenerContainer"
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="jmsFactory"></property>
<property name="messageListener" ref="receive"></property>
<property name="destination" ref="destination" />
</bean>
<!-- 配置JMS消息发送完成 -->


注意这里需要几个包 ,activeio-core-3.1.2.jar,activemq-all-5.5.0.jar,activemq-pool-5.5.0.jar,commons-pool-1.5.6.jar

剩下的就是在你的程序里面添加相应的消息发送和接收程序了
sender

@Component
public class JmsQueueSender
{
private JmsTemplate jmsTemplate;

public void setConnectionFactory(ConnectionFactory cf)
{
this.jmsTemplate = new JmsTemplate(cf);
}

public void simpleSend()
{
jmsTemplate.convertAndSend("Queue.Name", "test!!!");
}

public JmsTemplate getJmsTemplate()
{
return jmsTemplate;
}

public void setJmsTemplate(JmsTemplate jmsTemplate)
{
this.jmsTemplate = jmsTemplate;
}
}


receiver

@Component
public class JmsQueueReceiver implements MessageListener
{
@Override
public void onMessage(Message message)
{
if(message instanceof TextMessage)
{
final TextMessage textMessage = (TextMessage) message;
try
{
System.out.println(textMessage.getText());
}
catch(final JMSException e)
{
e.printStackTrace();
}
}
}
}


五、配置ActiveMQ以数据库的方式存储消息
ActiveMQ安装目录\conf\activemq.xml
找到 <broker>标签中的内容
  <persistenceAdapter>
<kahaDB directory="${activemq.base}/data/kahadb"/>
</persistenceAdapter>

注释掉以上内容,添加自己的数据库配置
<persistenceAdapter>
<jdbcPersistenceAdapter dataSource="#mysql-ds"/>
</persistenceAdapter>

配置以Mysql的方式保存消息

在<broker>标签以外的地方添加数据源

<bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" 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="root"/>
<property name="password" value="root"/>
<property name="poolPreparedStatements" value="true"/>
</bean>


将Mysql的包加到ActiveMQ的启动Lib下
在Mysql数据中新建数据库 activemq ,ActiveMQ在启动的时候会自动建表。

OK 。。。。
重新启动服务。 这样消息的发送者的消息将被保存到Mysql数据库,同时消息消耗者每读取一条消息。数据库中的消息也会相应的删除。
本项目采用C++编程语言结合ROS框架构建了完整的双机械臂控制系统,实现了Gazebo仿真环境下的协同运动模拟,并完成了两台实体UR10工业机器人的联动控制。该毕业设计在答辩环节获得98分的优异成绩,所有程序代码均通过系统性调试验证,保证可直接部署运行。 系统架构包含三个核心模块:基于ROS通信架构的双臂协调控制器、Gazebo物理引擎下的动力学仿真环境、以及真实UR10机器人的硬件接口层。在仿真验证阶段,开发了双臂碰撞检测算法和轨迹规划模块,通过ROS控制包实现了末端执行器的同步轨迹跟踪。硬件集成方面,建立了基于TCP/IP协议的实时通信链路,解决了双机数据同步和运动指令分发等关键技术问题。 本资源适用于自动化、机械电子、人工智能等专业方向的课程实践,可作为高年级课程设计、毕业课题的重要参考案例。系统采用模块化设计理念,控制核心与硬件接口分离架构便于功能扩展,具备工程实践能力的学习者可在现有框架基础上进行二次开发,例如集成视觉感知模块或优化运动规划算法。 项目文档详细记录了环境配置流程、参数调试方法和实验验证数据,特别说明了双机协同作业时的时序同步解决方案。所有功能模块均提供完整的API接口说明,便于使用者快速理解系统架构并进行定制化修改。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值