ActiveMQ入门实例

##ActiveMQ介绍
ActiveMQ是由Apache出品的,一款最流行的,能力强劲的开源消息总线。ActiveMQ是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,它非常快速,支持多种语言的客户端和协议,而且可以非常容易的嵌入到企业的应用环境中,并有许多高级功能。

什么情况下使用ActiveMQ?
多个项目之间集成
(1) 跨平台
(2) 多语言
(3) 多项目
降低系统间模块的耦合度,解耦
(1) 软件扩展性
系统前后端隔离
(1) 前后端隔离,屏蔽高安全区

##运行ActiveMQ
1、双击apache-activemq-5.5.1\bin\win64\activemq.bat运行ActiveMQ程序。

2、ActiveMQ默认启动时,启动了内置的jetty服务器,提供一个用于监控ActiveMQ的admin应用。 创建一个Queue,命名为FirstQueue
admin:http://127.0.0.1:8161/admin/

用户名和密码都是admin

3、ActiveMQ默认使用的TCP连接端口是61616, 通过查看该端口的信息可以测试ActiveMQ是否成功启动 netstat -an|find “61616”

C:\Documents and Settings\Administrator>netstat -an|find “61616”
TCP 0.0.0.0:61616 0.0.0.0:0 LISTENING

##实例测试
###接收者Receiver.java

package jms;

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.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

public class Receiver {

	public static void main(String[] args) {

		ConnectionFactory connectionFactory;
		Connection connection = null;
		Session session;
		Destination destination;
		MessageConsumer consumer;
		connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,
				ActiveMQConnection.DEFAULT_PASSWORD, "tcp://localhost:61616");
		
		
		 try {
			 
			connection = connectionFactory.createConnection();
			connection.start();
			
			// 获取操作连接
			session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
			
			destination = session.createQueue("FirstQueue");
			consumer = session.createConsumer(destination);
			
			while(true){
				TextMessage receive = (TextMessage) consumer.receive(100000);
			    if(receive!=null){
			    	System.out.println("收到信息"+receive.getText());
			    }
			}
			
		} catch (JMSException e) {
			
			e.printStackTrace();
		}finally {
			try {
				if(connection!=null){
					connection.close();
				}
				
			} catch (JMSException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}

###发送者Sender .java

package activemq;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;


public class Sender {
	private static final int SEND_NUMBER = 5;

	public static void main(String[] args) throws Exception {
		// 连接工厂,JMS用它创建连接
		ConnectionFactory connectionFactory;
		// JMS客户端到JMS provider的连接
		Connection connection = null;
		// 一个发送或接收消息的线程
		Session session;
		// 消息目的地
		Destination destination;
		// 消息发送者
		MessageProducer producer;
		// 构造ConnectionFactory实例对象
		connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,
				ActiveMQConnection.DEFAULT_PASSWORD, "tcp://localhost:61616");

		try {

			// 从工厂得到连接对象
			connection = connectionFactory.createConnection();
			// 启动
			connection.start();
			// 获取操作连接
			session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);

			destination = session.createQueue("FirstQueue");

			producer = session.createProducer(destination);

			producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);

			sendMessage(session, producer);

			session.commit();
		} catch (JMSException e) {
			//
			e.printStackTrace();
		}finally {
			if(connection!=null){
				connection.close();
			}
		}
	}

	public static void sendMessage(Session session, MessageProducer producer) throws Exception {

		for (int i = 1; i < SEND_NUMBER; i++) {
			TextMessage message = session.createTextMessage("ActiveMq发送消息" + i);
			System.out.println("发送消息:ActiveMq发送的消息" + i);
			producer.send(message);
		}
	}

}

先运行Receiver,再运行Sender(Receiver和Sender需要在两个eclispe上运行)
Sender端运行结果

发送消息:ActiveMq发送的消息1
发送消息:ActiveMq发送的消息2
发送消息:ActiveMq发送的消息3
发送消息:ActiveMq发送的消息4

Recevier端运行结果

收到信息ActiveMq发送消息1
收到信息ActiveMq发送消息2
收到信息ActiveMq发送消息3
收到信息ActiveMq发送消息4

再运行一次Sender,Recevier端又收到四条信息

收到信息ActiveMq发送消息1
收到信息ActiveMq发送消息2
收到信息ActiveMq发送消息3
收到信息ActiveMq发送消息4
收到信息ActiveMq发送消息1
收到信息ActiveMq发送消息2
收到信息ActiveMq发送消息3
收到信息ActiveMq发送消息4

看一下ActiveMQ服务器
这里写图片描述
我们可以看到创建了一个名称为FirstQueue的消息队列,队列中有8条消息未被消费,我们也可以通过Browse查看是哪些消息
这里写图片描述
如果这些队列中的消息,被删除,消费者则无法消费。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值