简单实现Java消息队列之activemq

Hi ,大家好

最近在学习JMS(Java Message Service),用到的是activemq(消息队列),写了简单的例子,跟大家一起分享一下:

1.JMS和activemq之间的关系 :  JMS是一种标准规范,接口形式(消息发送是异步,非阻塞的)/activemq则是实现了JMS,存在点对点/发布订阅

2.应用场景 : 系统A---->系统B 发送消息 , 则是就需要消息系统activemq来完成这个任务

3.练习需要用到的jar包 :  activemq-core-5.7.0.jar , geronimo-j2ee-management_1.1_spec-1.0.1.jar , geronimo-jms_1.1_spec-1.1.1.jar , org.slf4j.api_1.6.4.jar

4.练习需要用到的activemq包 ,官网下载windoiws版本/linux版本(看个人喜好,建议用linux版本) , 下面的例子是windows版本,为了方便

5.下载解压之后双击运行bin目录下win64下activemq.bat

6.运行完毕之后打开web控制台进行查看验证 , 网页地址栏输入 : http://localhost:8161/admin    user : admin  pwd : admin

7.创建两个工程A和工程B编写测试类 :

package activemqA;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnectionFactory;

//生产者
public class Sender {
	
	public static void main(String args[]){
		
		Sender sender = new Sender();
		sender.sendMessage("hello,activemqB");
		
	}
	
	public void sendMessage(String msg){
		
		ConnectionFactory connectionFactory = null;
		Connection connection = null;
		Session session = null;
		
		try {
			//1.创建连接工厂
			connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
			//2.得到一个连接
			connection = connectionFactory.createConnection();
			//3.创建一个Session
			session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
			//4.创建目的地
			Destination destination = session.createQueue("myQueue");
			//5.创建发送者
			MessageProducer messageProducer = session.createProducer(destination);
			//6.创建文本消息
			TextMessage textMessage = session.createTextMessage(msg);
			//7.发送消息
			messageProducer.send(textMessage);
		} catch (JMSException e) {
			e.printStackTrace();
		}finally{
			//8.关闭connection和sessiosn
					try {
						if(connection !=null){
						connection.close();
						}
						if (session !=null) {
							session.close();
						}
					} catch (JMSException e) {
						e.printStackTrace();
			}
		}
	}
}

检验消息是否发送成功请查看:web控制台会显示条数



package activemqB;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnectionFactory;

//消费者
public class Receiver {
	
	public static void main(String args[]){
		
		Receiver receiver = new Receiver();
		receiver.receiverMessage();
	}
	
	public void receiverMessage(){
		
		ConnectionFactory connectionFactory = null;
		Connection connection = null;
		Session session =null;
	
		try {
			//1.创建连接工厂
			connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
			//2.得到一个连接
			connection = connectionFactory.createConnection();
			//3.创建一个Session
			session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
			//4.创建目的地
			Destination destination = session.createQueue("myQueue");
			//5.创建接受者
			MessageConsumer messageConsumer = session.createConsumer(destination);
			//6.打开连接
			connection.start();
			//7.接收消息
			TextMessage textMessage = (TextMessage) messageConsumer.receive(1000);
			//8.输出验证
			System.out.println("接收到的消息为:"+textMessage.getText());
		} catch (JMSException e) {
			e.printStackTrace();
		}finally {
				try {
					if (connection !=null) {
					connection.close();
					}
					if (session !=null) {
						session.close();
					}
				} catch (JMSException e) {
					e.printStackTrace();
			}
		}
	}
}

8.温馨提示:需要注意的是在编写生产者时创建文本应把msg参数放进去,否则消费者这边输出是null奋斗





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值