`
longgangbai
  • 浏览: 7349518 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ActiveMQ简单实例发送消息

阅读更多

        在半年多的时间里,天天闲着,没有写blog也没有学习,现在要学习一些工作要使用的东西咯,公司使用的TongGTP和TongLinkQ最近一直不稳定,老大准备开发一个文件传输中间件,需要借鉴一些开源的mq框架学习和架构。

因为ActiveMQ是一个Apache的一个组件,比较活跃,并且有以下优点:

 

 

目前优点:

1.支持jms1.1和jms1.2等jms API。

2.容易跟当前的Spring框架整合。

3.容易JMX等整合,便于管理。

4.提供了高可靠性,可以采用主从服务的方式,Master broker只有在消息成功被复制到slave broker之后才会响应客户,保证消息的完整性

5.高容错性提供了failover机制。

6.支持多语言种类,java,c#等。

7.支持消息的持久化为文件或者数据库信息。

8安全可靠,可以和jaas整合。

9.在消息发送方面效率高于jbossmq.

 

 

如下为一个简单的发送消息的方法:

需要的jar为:

<classpathentry kind="lib" path="src/activemq-all-5.5.0.jar"/>
 <classpathentry kind="lib" path="src/slf4j-api-1.5.2-sources.jar"/>
 <classpathentry kind="lib" path="src/slf4j-api-1.5.2.jar"/>
 <classpathentry kind="lib" path="src/slf4j-simple-1.5.2.jar"/>
 <classpathentry kind="lib" path="src/log4j-1.2.8.jar"/>
 <classpathentry kind="lib" path="src/commons-dbcp-1.4.jar"/>
 <classpathentry kind="lib" path="src/commons-pool-1.5.4.jar"/>
 <classpathentry kind="lib" path="src/commons-collections-3.2.1.jar"/>

 

1.首先使用activemq.bat启动ActiveMQ的broker进程,监听默认的61616端口可以使用如下命令查看端口:

netstat -a

检查显示信息有无61616端口信息。

 

2.开发消息生产者代码如下:

package easyway.app.activemq.demo2;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.jms.Connection;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.StreamMessage;

import org.apache.activemq.ActiveMQConnectionFactory;
/**
 * 消息的创建者
 * @author longgangbai
 *
 */
public class StreamMsgProducer {
	public void send(File file) {
		ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory();
		Connection conn = null;
		try {
			conn = factory.createConnection();
			conn.start();
			Session session = conn.createSession(false,
					Session.AUTO_ACKNOWLEDGE);
			Destination queue = session.createQueue("streamMsg");
			MessageProducer producer = session.createProducer(queue);

			InputStream in = new FileInputStream(file);
			byte[] buffer = new byte[2048];
			int c = -1;
			while ((c = in.read(buffer)) > 0) {
				StreamMessage smsg = session.createStreamMessage();
				smsg.writeBytes(buffer, 0, c);
				producer.send(smsg);
				System.out.println("send: " + c);
			}
			in.close();
		} catch (JMSException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (conn != null) {
				try {
					conn.close();
				} catch (JMSException e) {
					e.printStackTrace();
				}
			}
		}
	}

	public static void main(String[] args) {
		File file = new File("c:\\send.txt");
		new StreamMsgProducer().send(file);
	}
}

 

3.开发消息消费者

package easyway.app.activemq.demo2;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import javax.jms.Connection;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.StreamMessage;

import org.apache.activemq.ActiveMQConnectionFactory;
/**
 * 消息的消费者
 * @author longgangbai
 *
 */
public class StreamMsgConsumer {
	public void receive() {
		ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory();
		Connection conn = null;
		try {
			conn = factory.createConnection();
			conn.start();
			Session session = conn.createSession(false,
					Session.AUTO_ACKNOWLEDGE);
			Destination queue = session.createQueue("streamMsg");
			MessageConsumer consumer = session.createConsumer(queue);

			OutputStream out = new FileOutputStream("c:\\receive.txt");
			byte[] buffer = new byte[2048];
			while (true) {
				Message msg = consumer.receive(5000);
				if (msg == null) {
					break;
				}

				if (msg instanceof StreamMessage) {
					StreamMessage smsg = (StreamMessage) msg;
					int c = smsg.readBytes(buffer);
					out.write(buffer, 0, c);
					System.out.println("Receive: " + c);
				}
			}
			out.close();
		} catch (JMSException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (conn != null) {
				try {
					conn.close();
				} catch (JMSException e) {
					e.printStackTrace();
				}
			}
		}
	}

	public static void main(String[] args) {
		new StreamMsgConsumer().receive();
	}
}

 

4.分别启动消息消费者和生产者即可。

 

 

分享到:
评论
1 楼 yuandaf 2011-11-07  
有个成熟的文件传输中间件产品,可以参考 hulft(中文版叫 海度),不知有没有听说过?

相关推荐

    activemq 通过ajax发送接收消息简单例子

    在这个简单的例子中,我们将探讨如何利用Ajax与ActiveMQ交互,发送和接收消息。首先,你需要在服务器端设置一个ActiveMQ实例,可以通过下载并安装ActiveMQ来完成。安装完成后,启动ActiveMQ服务,这通常会开启一个...

    SpringBoot+ActiveMq+MQTT实现消息的发送和接收

    6. 发送消息业务类:在业务层,调用上述接口发送消息。这通常发生在某些业务操作完成后,需要通知其他系统或组件的时候。 7. 测试与调试:编写测试用例,确保消息能正确发送和接收,同时监控ActiveMQ服务器以查看...

    一个activeMQ的简单例子

    这个简单的ActiveMQ例子可能是为了演示如何设置和使用基本的生产者和消费者,以及如何通过消息队列实现异步通信。在实际应用中,我们还可以利用ActiveMQ的高级特性,如持久化、优先级、消息筛选等,以满足更复杂的...

    Apache ActiveMQ 入门最简单例子

    在Apache ActiveMQ中,消息生产者(Producer)发送消息到队列,而消息消费者(Consumer)从队列中取出并处理这些消息。ActiveMQ支持多种协议,包括OpenWire、STOMP、AMQP、MQTT和WS,这使得它能与各种编程语言和平台...

    activemq-cpp发送接收消息,消息过滤器

    发送消息的基本步骤包括: 1. **初始化连接**:创建一个`ConnectionFactory`实例,然后通过它建立到ActiveMQ服务器的连接。这通常涉及到设置URL、用户名和密码等参数。 2. **创建会话**:连接建立后,需要创建一个...

    spring使用activeMQ实现消息发送

    2. **配置JmsTemplate**:接下来,我们需要创建一个`JmsTemplate`实例,它是发送和接收消息的主要工具。配置如下: ```java @Bean public JmsTemplate jmsTemplate(ConnectionFactory connectionFactory) { ...

    Spring整合ActiveMQ简单实例

    **Spring 整合 ActiveMQ 简单实例** 在当今的分布式系统中,消息队列(Message Queue)作为异步处理、解耦组件的关键技术,被广泛应用。Spring 框架与 ActiveMQ 的整合,使得开发者能够轻松地在 Spring 应用程序中...

    ActiveMQ 简单例子源码 包含操作说明

    通过这个简单的 ActiveMQ 示例,你可以了解如何利用 JMS 接口在 Java 应用程序中使用 ActiveMQ 进行消息通信。这个例子将帮助你快速上手,并理解消息队列在分布式系统中的作用和价值。记住,深入学习 ActiveMQ 的...

    activeMQ简单入门案例

    - 实现生产者代码,创建一个连接工厂,连接到ActiveMQ服务器,并创建一个Producer发送消息: ```java import org.apache.activemq.ActiveMQConnectionFactory; // 创建连接工厂 ActiveMQConnectionFactory ...

    基于Maven的ActiveMQ的简单实例

    总结,基于Maven的ActiveMQ简单实例展示了如何利用Maven管理依赖,以及如何使用Java API与ActiveMQ交互进行消息发送和接收。这个实例可以帮助初学者快速理解和入门ActiveMQ的基本用法,为进一步探索分布式系统中的...

    ActiveMQ的简单例子

    本教程将通过一个简单的例子介绍ActiveMQ的两个核心模式:点对点(Point-to-Point,P2P)和发布/订阅(Publish/Subscribe,Pub/Sub)。我们将使用IntelliJ IDEA作为集成开发环境来实现这些示例。 首先,我们需要...

    activemq与spring整合发送jms消息入门实例

    4. **编写发送消息的代码**:在Java类中注入`JmsTemplate`,然后使用它的`send()`方法发送消息。例如,你可以创建一个名为`SendJms`的类: ```java @Service public class SendJms { @Autowired private ...

    简单的activemq点对点的同步消息模型

    在“简单的activemq点对点的同步消息模型”中,我们将探讨如何构建一个基本的、基于ActiveMQ的点对点消息传递系统,以及它的工作原理。 1. **点对点模型**:在JMS中,点对点模型(P2P)是一种消息传递模式,其中...

    activeMQ的java简单实例.zip

    在这个"activeMQ的java简单实例.zip"压缩包中,我们可能找到了一个简单的Java项目,用于演示如何在Java应用中集成和使用ActiveMQ。以下是一些关于ActiveMQ和Java集成的关键知识点: 1. **ActiveMQ安装与配置**:...

    activeMQ简单例子

    在“activeMQ简单例子”中,我们将探讨如何在Apache ActiveMQ 5.11.1版本下配置和运行一个简单的消息发送与接收应用。 首先,你需要下载并解压`apache-activemq-5.11.1-bin.zip`。这个压缩包包含了运行ActiveMQ所需...

    springMVC+activeMQ例子

    4. **编写消息生产者**:在Spring MVC的控制器或服务层,创建一个方法来发送消息到ActiveMQ。可以使用`JmsTemplate`或者`DefaultMessageListenerContainer`来实现。 5. **编写消息消费者**:创建一个实现`Message...

    activemq向android推送消息实例

    在服务器端,你可以使用Java API或者ActiveMQ管理控制台来发送消息。例如,使用Java API创建一个`Producer`对象,然后调用`send`方法将消息发送到已订阅的主题或队列: ```java ConnectionFactory ...

    消息队列-activemq入门实例.zip

    通过activemq-demo-sub、activemq-demo和activemq-demo-pub这三个示例,我们可以了解到ActiveMQ的基本操作流程,包括生产者如何发送消息,消费者如何接收消息,以及如何进行消息的订阅。这只是一个简单的入门起点,...

Global site tag (gtag.js) - Google Analytics