`
ghbullor
  • 浏览: 9393 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Spring+ActiveMQ+Mysql 配置JMS

阅读更多
一、准备一个可以运行的Spring环境

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

三、试用
         单独编写消息发送者和消息接受以测试相应
        消息发送
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("");
	}



消息接收

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数据库,同时消息消耗者每读取一条消息。数据库中的消息也会相应的删除。
分享到:
评论

相关推荐

    springMvc+spring+activeMq+mybaits

    Spring与ActiveMQ的集成非常便捷,可以使用Spring的JmsTemplate或配置监听容器来发送和接收消息。 MyBatis是一个轻量级的持久层框架,它简化了Java应用与数据库之间的交互。MyBatis允许开发者编写SQL语句,将它们与...

    学习用Java写一个聊天室,spring4.2.5+mybatis+mysql+shiro+activemq+html5.zip

    在本项目中,"学习用Java写一个聊天室,spring4.2.5+mybatis+mysql+shiro+activemq+html5.zip",我们将会探讨一系列关键的Java Web开发技术,这些技术用于构建一个实时的在线聊天室。这个项目结合了Spring框架、...

    SpringMvc+Eclipselink+JPA+ActiveMQ+MySQL在线聊天

    综上所述,这个项目利用Spring MVC作为后端控制器,Eclipselink和JPA处理数据库操作,ActiveMQ实现消息的实时传输,MySQL存储数据,SUI则用于构建前端界面,提供用户友好的聊天功能。这些技术的结合,构建出一个高效...

    ActiveMQ+Camel+Spring+jms Demo(二)

    在本项目"ActiveMQ+Camel+Spring+jms Demo(二)"中,我们将探讨一个集成ActiveMQ消息中间件、Apache Camel路由引擎、Spring框架以及Java消息服务(JMS)的示例应用。这个组合提供了强大的企业级消息处理能力,是...

    管理系统系列--基于SSH+easyUI+ActiveMQ+MySQL的校园宿舍管理系统。 分为系统管理员、楼宇管理.zip

    【标题】中的“管理系统系列--基于SSH+easyUI+ActiveMQ+MySQL的校园宿舍管理系统”指的是一款结合了多种技术的校园宿舍管理软件。SSH、easyUI、ActiveMQ和MySQL是构建这个系统的关键技术组件。 **SSH(Struts2 + ...

    springboot整合mybatis+activemq(activemq可以去官网下载 )

    在IT行业中,Spring Boot、MyBatis和ActiveMQ是三个非常重要的组件,分别用于简化Spring应用的初始化,处理持久化操作以及实现消息队列。本文将深入探讨如何将这三个技术整合到一个项目中,以便构建高效、可扩展的...

    Maven+Spring+Spring MVC+MyBatis+MySQL整合SSM框架

    ActiveMQ是Apache的一个开源消息中间件,支持多种协议,如JMS(Java消息服务)。在SSM框架中,ActiveMQ可以用来实现异步处理、解耦系统组件以及提供高可用性。 7. CXF Webservice: Apache CXF是一个用于构建和开发...

    activeMQ与spring整合开发的例子程序

    1. **Spring集成ActiveMQ的基本配置**:在Spring应用中使用ActiveMQ,首先需要在Spring配置文件中添加JMS相关的bean,如ConnectionFactory、Destination(Queue或Topic)、MessageListenerContainer等。这些配置将...

    spring,mybatis,hibernate,activemq,redis,dubbo的集成

    ActiveMQ 是Apache出品的一款消息中间件,基于Java消息服务(JMS)。它允许应用程序之间通过异步消息传递进行通信,提高系统的可扩展性和解耦度。在微服务架构中,ActiveMQ常被用于服务间的通讯。 5. **Redis**: ...

    spring集成activemq演示queue和topic 持久化

    你可以通过修改`activemq.xml`配置文件来设置持久化存储,比如将消息存储到MySQL数据库。在配置中指定数据源,如下所示: ```xml ${activemq.data} &lt;driverClassName&gt;...

    Spring集成JMS

    在Spring+JMS+Mysql的场景下,消息可能会与数据库操作相结合,比如在消息发送或接收后执行相关的数据库事务,确保数据的一致性。通过这样的集成,你可以构建出高可用、可扩展的分布式系统,有效地处理大量并发的异步...

    tasks:Spring Boot和ActiveMQ Artemis的生产者消费者微服务教程

    涵盖的主题Sprint Boot子休息区ApiSpring启动批处理SSL连接JMS(Java消息服务) Swagger UI用于可视化API错误处理基本认证POJO &lt;-&gt; DTO的映射器记录中测验使用DataJpaTest的存储库使用DataMongoTest的存储库使用...

    activemq所有jar

    jms.jar`或者`spring-context-support.jar`,这些是Spring框架对JMS支持的扩展,允许开发者利用Spring的IoC(Inversion of Control)和AOP(Aspect Oriented Programming)特性来更方便地集成ActiveMQ。例如,Spring...

    2019品优购.txt

    前端:angularJS + Bootstrap 后台:SSM( springmvc+spring+mybatis) 数据库:mysql,使用mycat读写分离 开发模式:SOA 服务中间件:dubbox,需要和zookeeper配合使用 注册中心:zookeeper 消息中间件:Activemq,...

    黑马49期全系列包括品优购

    zookeeper 消息中间件:Activemq,使用spring-jms 负载均衡:nginx 搜索:solr集群(solrCloud),配合zookeeper搭建, 使用spring-data-solor 缓存:redis集群,使用spring-data-redis 图片存储:fastDFS集群 网页...

    品优购_day13_SpringJms_V1.31

    8. **ActiveMQ的下载与安装**:课程中可能涵盖ActiveMQ的下载和配置过程,帮助开发者建立本地环境,以便实践JMS的使用。 通过学习这些知识点,开发者将能够理解消息中间件的作用,选择适合的中间件产品,以及使用...

    分布式中间件技术实战:基于springboot集成redis,mysql,activemq,-component.zip

    在SpringBoot中,我们可以通过Spring的JMS模块集成ActiveMQ。首先,添加ActiveMQ客户端依赖,接着配置连接工厂和目的地(队列或主题)。然后,可以创建消息生产者和消费者,使用`JmsTemplate`发送和接收消息。在高...

    黑马品优购电商项目全套资源

    消息中间件:Activemq,使用弹簧JMS 负载均衡:nginx的的 搜索:Solr中的集群(solrCloud),配合动物园管理员搭建,使用弹簧-数据-索洛 缓存:Redis的的集群,使用弹簧数据redis的的 图片存储:fastDFS集群 | |...

    ActiveMQ应用与实例1

    ActiveMQ是Apache软件基金会开发的一款开源消息代理,它实现了Java消息服务(JMS)1.1和J2EE 1.4规范,为各种应用程序提供可靠的消息传递功能。ActiveMQ的特点在于其广泛的语言和协议支持,包括Java、C、C++、C#、...

    learning spring boot

    - 利用Spring Boot自动配置特性,创建JMS消息发布/订阅应用程序。 - 修改和调试应用结果,覆盖默认的Bean或属性。 - 创建自定义健康检查来检查消息代理(如ActiveMQ)。 - 将定制的应用数据和自定义指标集成到...

Global site tag (gtag.js) - Google Analytics