ActiveMQ安装和基本使用

ActiveMQ简介

ActiveMQ是Apache推出的,一款开源的,完全支持JMS1.1和J2EE 1.4规范的JMSProvider实现的消息中间件(Message Oriented Middleware,MOM),最主要的功能就是:实现JMS Provider,用来帮助实现高可用、高性能、可伸缩、易用和安全的企业级面向消息服务的系统。

ActiveMQ安装和基本使用

1、 安装 JDK 并配置环境变量(略)

参考博客: Linux下安装jdk1.7

2、 下载 Linux 版的 最新版ActiveMQ,并上传到服务器

http://apache.fayea.com/activemq/

3、 解压安装

$ tar -zxvf apache-activemq-5.14.5-bin.tar.gz
$ mv apache-activemq-5.14.5 activemq
#如果启动脚本 activemq 没有可执行权限,此时则需要授权(此步可选)
$ cd /usr/local/activemq/bin/
$ chmod 755 ./activemq

4.打开防火墙端口

参考博客: Linux关闭防火墙

5.启动activemq

$ cd /usr/local/activemq/bin/
$ ./activemq start

6.打开管理界面:http://172.20.1.205:8161 登录账号密码默认:admin/admin


7.安全配置(消息安全)

ActiveMQ 如果不加入安全机制的话,任何人只要知道消息服务的具体地址(包括 ip,端口,消息地址[队列或者主题地址],),都可以肆无忌惮的发送、接收消息。关于ActiveMQ 安装配置参考: http://activemq.apache.org/security.html
ActiveMQ 的消息安全配置策略有多种,我们以简单授权配置为例:
在 conf/activemq.xml 文件中在 broker 标签内的最后位置加入以下内容即可:
$ vi /usr/local/activemq/conf/activemq.xml
<plugins>
	<simpleAuthenticationPlugin>
		<users>
			<authenticationUser username="ryx" password="ryx" groups="users,admins"/>
		</users>
	</simpleAuthenticationPlugin>
</plugins>
定义了一个 ryx 用户,密码为 ryx,角色为 users,admins

设置登录用户 admin 的用户名和密码:
将authenticate 的值设为 true(默认)
$ vi /usr/local/activemq/conf/jetty.xml
<bean id="securityConstraint" class="org.eclipse.jetty.util.security.Constraint">
	<property name="name" value="BASIC" />
	<property name="roles" value="admin" />
	<property name="authenticate" value="true" />
</bean>
控制台的登录用户名密码保存在 conf/jetty-realm.properties 文件中,内容如下:
$ vi /usr/local/activemq/conf/jetty-realm.properties
# Defines users that can access the web (console, demo, etc.)
# username: password [,rolename ...]
admin: admin, admin
user: user, user
注意:用户名和密码的格式是
用户名 : 密码 ,角色名
重启:

/usr/local/activemq/bin/activemq restart

8.消息生产者也与消息消费者测试

Producer类

package com.ryx.test;


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


import org.apache.activemq.ActiveMQConnectionFactory;


public class Producer {


	public static void main(String[] args) throws Exception {
		//根据用户名,密码,url创建一个连接工厂
		ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("ryx", "ryx", "tcp://172.20.1.205:61616");
		//从工厂中获取一个连接
		Connection connection = connectionFactory.createConnection();
		connection.start();
		//第一个参数:是否支持事务,如果为true,则会忽略第二个参数,被jms服务器设置为SESSION_TRANSACTED
		//第二个参数为false时,paramB的值可为Session.AUTO_ACKNOWLEDGE,Session.CLIENT_ACKNOWLEDGE,DUPS_OK_ACKNOWLEDGE其中一个。
		//Session.AUTO_ACKNOWLEDGE为自动确认,客户端发送和接收消息不需要做额外的工作。哪怕是接收端发生异常,也会被当作正常发送成功。
        //Session.CLIENT_ACKNOWLEDGE为客户端确认。客户端接收到消息后,必须调用javax.jms.Message的acknowledge方法。jms服务器才会当作发送成功,并删除消息。
        //DUPS_OK_ACKNOWLEDGE允许副本的确认模式。一旦接收方应用程序的方法调用从处理消息处返回,会话对象就会确认消息的接收;而且允许重复确认。
		Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
		
		
		
		//=======================================================================
		//创建一个到达的目的地(队列),如果这个队列不存在,将会被创建
		//点对点模式 session.createQueue
		Destination destination = session.createQueue("ryx.consumption.counting");
		
		//发布订阅模式
		//Destination destination = session.createTopic("ryx.consumption.counting");
		//=======================================================================
		
		
		
		
		//从session中,获取一个消息生产者
		MessageProducer producer = session.createProducer(destination);
		//设置生产者的模式,有两种可选
        //DeliveryMode.PERSISTENT 当activemq关闭的时候,队列数据将会被保存
        //DeliveryMode.NON_PERSISTENT 当activemq关闭的时候,队列里面的数据将会被清空
		producer.setDeliveryMode(DeliveryMode.PERSISTENT);
		
		//创建一条消息,当然,消息的类型有很多,如文字,字节,对象等,可以通过session.create..方法来创建出来
		TextMessage message = session.createTextMessage("这是一首简单的小情歌");
		Thread.sleep(1000);
		//通过消息生产者发出消息
		producer.send(message);
		session.commit();
		session.close();
		connection.close();
	}
}

Consumer类

package com.ryx.test;


import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.TextMessage;


import org.apache.activemq.ActiveMQConnectionFactory;


public class Consumer {
	
	public static void main(String[] args) throws Exception {
		//根据用户名,密码,url创建一个连接工厂
		ConnectionFactory cf = new ActiveMQConnectionFactory("ryx", "ryx", "tcp://172.20.1.205:61616");
		//从工厂中获取一个连接
		Connection connection = cf.createConnection();
		connection.start();
		//第一个参数:是否支持事务,如果为true,则会忽略第二个参数,被jms服务器设置为SESSION_TRANSACTED
		//第二个参数为false时,paramB的值可为Session.AUTO_ACKNOWLEDGE,Session.CLIENT_ACKNOWLEDGE,DUPS_OK_ACKNOWLEDGE其中一个。
		//Session.AUTO_ACKNOWLEDGE为自动确认,客户端发送和接收消息不需要做额外的工作。哪怕是接收端发生异常,也会被当作正常发送成功。
        //Session.CLIENT_ACKNOWLEDGE为客户端确认。客户端接收到消息后,必须调用javax.jms.Message的acknowledge方法。jms服务器才会当作发送成功,并删除消息。
        //DUPS_OK_ACKNOWLEDGE允许副本的确认模式。一旦接收方应用程序的方法调用从处理消息处返回,会话对象就会确认消息的接收;而且允许重复确认。
		final Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);




		
		
		//=======================================================================
		//创建一个到达的目的地(队列),如果这个队列不存在,将会被创建
		//点对点模式 session.createQueue
		Destination destination = session.createQueue("ryx.consumption.counting");
		
		//发布订阅模式
		//Destination destination = session.createTopic("ryx.consumption.counting");
		//=======================================================================
		
		
		
		
		
		//创建一个消费者
		MessageConsumer consumer = session.createConsumer(destination);
		
		Message message = consumer.receive();
		while(message!=null) {
			TextMessage txtMsg = (TextMessage)message;
			session.commit();
			System.out.println("收到消 息:" + txtMsg.getText());
			message = consumer.receive(1000L);
		}
		session.close();
		connection.close();
	}


}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值