ActiveMQ例子

ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现

贴代码:

server连接方式配置文件: conection.properties

#服务器连接地址
url=tcp://192.168.1.101:61616

#消息队列名
queue=MYQUEUE

#授权用户
username=user

#授权密码
password=password

server连接管理类:ConnectionManager.java

package net.itant.util;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import javax.jms.Connection;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.MessageProducer;
import javax.jms.Session;

import org.apache.activemq.ActiveMQConnectionFactory;

/**
 * 管理服务器连接
 * 
 */

public class ConnectionManager {

	private String url;					//远程服务器地址 
	private String queue;				//消息队列名
	private String username;				//用于连接服务器的用户名
	private String password;				//用于连接服务器的密码
	private final String URL = "url";			//properties文件中url的key
	private final String QUEUE = "queue";		//properties文件中query的key
	private final String USERNAME = "username";	//properties文件中username的key
	private final String PASSWORD = "password";	//properties文件中password的key
	private final String FILEPATH = "/connection.properties";
	
	/**
	 * 初始化连接字符串
	 * @return 是否初始化成功
	 */
	public Boolean init() {
		Properties properties = new Properties();
		InputStream inputStream = Object.class.getResourceAsStream(FILEPATH);
		if (inputStream != null) {
			try {
				properties.load(inputStream);
				url = properties.getProperty(URL);
				queue = properties.getProperty(QUEUE);
				username = properties.getProperty(USERNAME);
				password = properties.getProperty(PASSWORD);
				inputStream.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			return true;
		} else {
		}
		return false;
	}
	
	/**
	 * 与远程服务器取得连接
	 * @param url			服务器连接地址
	 * @param username 		用户名
	 * @param password		密码
	 * @return				连接对象
	 * @throws JMSException	JMS异常S
	 */
	public Connection getConnection() {
		Connection connection = null;
		if (init()) {
			ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(url);
			try {
				connection = factory.createConnection(username, password);
			} catch (JMSException e) {
				e.printStackTrace();
			}
		}
		return connection;
	}
	
	/**
	 * 关闭连接
	 * @param connection	与远程服务器连接
	 * @throws JMSException JMS异常
	 */
	public void closeConnection(Connection connection, Session session,
			MessageProducer producer, MessageConsumer consumer) {
		try {
			if (producer != null) {
				producer.close();
			}
			if (consumer != null) {
				consumer.close();
			}
			if (session != null) {
				session.close();
			}
			if (connection != null) {
				connection.close();
			}
		} catch (JMSException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 取得队列名
	 * @return 队列名
	 */
	public String getQueue() {
		init();
		return queue;
	}

}

消息处理类:DataExchange.java

package net.itant.util;

import java.util.ArrayList;
import java.util.List;

import javax.jms.Connection;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;

/**
 * 与远程服务器通过JMS进行数据传递
 *
 */

public class DataExchange {
	
	/**
	 * 往消息队列发送消息
	 * @param data 消息内容
	 */
	public void dataSend(String data) {
		Connection connection;
		Session session = null;
		MessageProducer producer = null;
		String queue;
		ConnectionManager manager = new ConnectionManager();
		connection = manager.getConnection();
		try {
			connection.start();
			queue = manager.getQueue();
			session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
			Destination destination = session.createQueue(queue);
			producer = session.createProducer(destination);
			TextMessage message = session.createTextMessage(data);
			producer.send(message);
			session.commit();
		} catch (JMSException e) {
			e.printStackTrace();
		} finally {
			manager.closeConnection(connection, session, producer, null);
		}
	}
	
	/**
	 * 从服务器消息队列取消息
	 * @param timeout 超时时间
	 * @return 取到的消息
	 */
	public List<String> dataReceive() {
		List<String> resultList = new ArrayList<String>();
		final int TIMEOUT = 1000;
		Connection connection;
		Session session = null;
		MessageConsumer consumer = null;
		String queue;
		ConnectionManager manager = new ConnectionManager();
		connection = manager.getConnection();
		queue = manager.getQueue();
		try {
			connection = manager.getConnection();
			connection.start();
			session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
			Destination destination = session.createQueue(queue);
			consumer = session.createConsumer(destination);
			// Receives the next message that arrives within the specified timeout interval
			Message message;
			while ((message = consumer.receive(TIMEOUT)) != null){
				if (message != null && (message instanceof TextMessage) ) {
					TextMessage txtMsg = (TextMessage) message;
					resultList.add(txtMsg.getText());
				}
			}
			session.commit();
		} catch (JMSException e){
			e.printStackTrace();
		} finally {
			manager.closeConnection(connection, session, null, consumer);
		}
		return resultList;
	}
	
}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: ActiveMQ 支持传输 JSON 数据。你可以使用 JMS Message 类型为 TextMessage,然后将 JSON 数据作为文本发送。 下面是一个简单的例子: ```java // 创建 ActiveMQ 连接工厂 ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616"); // 创建连接 Connection connection = connectionFactory.createConnection(); connection.start(); // 创建会话 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); // 创建消息队列 Destination destination = session.createQueue("myQueue"); // 创建消息生产者 MessageProducer producer = session.createProducer(destination); // 创建 JSON 数据 JSONObject jsonObject = new JSONObject(); jsonObject.put("name", "John"); jsonObject.put("age", 30); String json = jsonObject.toString(); // 创建文本消息 TextMessage message = session.createTextMessage(json); // 发送消息 producer.send(message); // 关闭连接 connection.close(); ``` 这个例子将创建一个 ActiveMQ 连接,发送包含 JSON 数据的文本消息到名为 `myQueue` 的消息队列中。 ### 回答2: ActiveMQ是一个开源的消息中间件,它提供了高效可靠的消息传递机制。在ActiveMQ中传输JSON数据是非常常见的场景。 首先,我们需要创建一个ActiveMQ Broker实例,该实例负责接收和分发消息。可以使用ActiveMQ提供的默认配置文件进行配置,并通过命令行启动Broker。 然后,我们需要创建一个消息生产者,这个生产者负责将JSON数据封装成消息并发送到ActiveMQ Broker中。我们可以使用ActiveMQ提供的Java客户端API来实现。首先,我们创建一个连接工厂,然后创建一个连接,接着创建一个会话,并指定要发送的消息队列。最后,我们创建一个消息,并将JSON数据作为消息内容发送。 在接收端,我们需要创建一个消息消费者来接收从ActiveMQ Broker中发送过来的消息。同样地,我们可以使用ActiveMQ提供的Java客户端API来实现。首先,我们创建一个连接工厂,然后创建一个连接,接着创建一个会话,并指定要接收消息的消息队列。最后,我们创建一个消息监听器,并在监听器中处理接收到的JSON数据。 在消息的传输过程中,ActiveMQ会负责将JSON数据进行序列化和反序列化,以确保数据的完整性和可靠性。当消息发送到ActiveMQ Broker时,它会存储在消息队列中,并根据预设的路由策略将消息发送给消息消费者。 总之,ActiveMQ是一个非常强大和灵活的消息中间件,可以很方便地用于传输JSON数据。通过使用ActiveMQ提供的Java客户端API,我们可以轻松地实现消息的发送和接收,并保证数据的完整性和可靠性。 ### 回答3: ActiveMQ是一种流行的开源消息中间件,它支持多种协议和传输格式,包括传输JSON数据。 在ActiveMQ中使用JSON进行消息传输有几种方式。一种常见的方式是将JSON数据封装在消息体中进行传输。发送方将JSON对象转换为字符串,并将其设置为消息的内容,然后通过ActiveMQ发送消息。接收方通过从消息中获取内容并将其解析为JSON对象来接收消息。 另一种方式是使用ActiveMQ的对象消息功能,它允许直接将JSON对象作为消息的内容进行传输。发送方将JSON对象通过ActiveMQ的对象消息接口发送消息,接收方则可以直接接收到JSON对象。 使用JSON进行消息传输具有许多优点。首先,JSON是一种轻量级的数据交换格式,易于理解和解析。其次,JSON格式比较紧凑,可以减少传输数据的大小,提高传输效率。此外,JSON支持多种编程语言,使得跨平台和跨语言的消息传输更加方便和灵活。 总之,ActiveMQ可以轻松地支持JSON数据的传输。借助ActiveMQ的强大功能,开发人员可以方便地将JSON数据封装在消息中进行传输,并能够实现灵活的消息通信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值