启动activemq_ActiveMQ

什么是 ActiveMQ

ctiveMQ 是 Apache 出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个 完全支持 JMS1.1 和 J2EE 1.4 规范的 JMS Provider 实现,尽管 JMS 规范出台已经是很久 的事情了,但是 JMS 在当今的 J2EE 应用中间仍然扮演着特殊的地位。

什么是消息

“消息”是在两台计算机间传送的数据单位。消息可以非常简单,例如只包含文本字符串; 也可以更复杂,可能包含嵌入对象。

什么是队列

first in first out

c5b97dd24c779efac4624df817d9d700.png

什么是消息队列

“消息队列”是在消息的传输过程中保存消息的容器。

常用消息服务应用

 ActiveMQ 
		ActiveMQ 是 Apache 出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完 全支持 JMS1.1 和 J2EE 1.4 规范的 JMS Provider 实现。 
 RabbitMQ 
		RabbitMQ 是一个在 AMQP 基础上完成的,可复用的企业消息系统。他遵循 Mozilla Public License 开源协议。开发语言为 Erlang。 
 RocketMQ 
		由阿里巴巴定义开发的一套消息队列应用服务。 

JMS

JMS(Java Messaging Service)是 Java 平台上有关面向消息中间件的技术规范,它便于 消息系统中的 Java 应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接 口,简化企业应用的开发。

点对点模型(Point To Point):生产者发送一条消息到 queue,只有一个消费者能收到。

bd68224cb22f9868de8b7309fd927b2b.png

发布订阅模型(Publish/Subscribe):发布者发送到 topic 的消息,只有订阅了 topic 的订阅者才会收到消息。

719a03d9815939d5c89477666c3dfd01.png

安装ActiveMQ

1、上传ActiveMQ的资源包到Linux中。

2、解压该资源包。

6735e9f8245d3667697bc50b835921a8.png

3、检查权限

ls -al apache-activemq-5.9.0/bin

如果权限不足,则无法执行,需要修改文件权限: chmod 755 activemq

4、启动

c54e5868c573e18496be53adf49d821a.png

5、测试 ActiveMQ

5.1、 检查进程

c4861b61550539aca21871cdfb2b280b.png

5.2、管理页面。

	使用浏览器访问 ActiveMQ 管理应用。
	地址如下: http://ip:8161/admin/ 
        默认的用户名: admin 密码: admin

fdab8c0b8752b2b2115ddfc67e0d1cb9.png

5.3、访问端口,默认的为8161

vim /usr/local/activemq/conf/jetty.xml

fef84c27a802cc2c862512a1f8f01e28.png

5.4、登录管理页面的用户名和密码

conf/users.properties 配置文件.内容为: 用户名=密码 保存并重启 ActiveMQ 服务即可.

vim /usr/local/activemq/conf/users.properties

cd3b2fad1d65423e018bfaf45771a82b.png

5.5、ActiveMQ服务的管理账户和普通账户

vim /usr/local/activemq/conf/jetty-realm.properties

1e091d3f27e40f8079168361b4b1ce16.png

6、重启 ActiveMQ

只要对配置文件做了操作,那么就需要重启ActiveMQ。

命令:/usr/local/activemq/bin/activemq restart

7、关闭ActiveMQ

命令:/usr/local/activemq/bin/activemq stop

8、配置文件 activemq.xml

默认管理着两个端口,一个是管理页面的8161,另一个是在调用activemq做编程时的端口时61616。
配置文件中,配置的是 ActiveMQ 的核心配置信息,是提供服务时使用的配置,可以修改启动的访问端口。
即 java 编程中访问 ActiveMQ 的访问端口,默认端口为 61616。
使用协议是: tcp 协议,修改端口后,保存并重启 ActiveMQ 服务即可。

命令:vim /usr/local/activemq/conf/activemq.xml 

6e08b2083e05ac46aee232ff68a358fb.png
命令:vim /usr/local/activemq/conf/activemq.xml

ActiveMQ目录

bin 存放的是脚本文件  
conf 存放的是基本配置文件  
data 存放的是日志文件  
docs 存放的是说明文档  
examples 存放的是简单的实例 
lib 存放的是 activemq 所需 jar 包  
webapps 用于存放项目的目录 
webapps-demo,存放示例的项目。

7b43989154a17567178e3565e3cabac5.png

ActiveMQ 术语

1、Destination [ˌdestɪˈneɪʃn]

目的地,JMS Provider(消息中间件)负责维护,用于对 Message 进行管理的对象。 MessageProducer 需要指定 Destination 才能发送消息,MessageReceiver 需要指定 Destination 才能接收消息。

2、Producer [prəˈdjuːsə(r)]

消息生成者,负责发送 Message 到目的地。

3、Consumer [kənˈsjuːmə(r)] | Receiver [rɪˈsiːvə(r)]

消息消费者,负责从目的地中消费【处理|监听|订阅】Message。

4、Message

消息,消息封装一次通信的内容。

ActiveMQ 应用

ActiveMQ 常用 API 简介 

1、ConnectionFactory :链接工厂, 用于创建链接的工厂类型。

2、Connection:链接,用于建立访问 ActiveMQ 连接的类型,由链接工厂创建。

3、Session:会话, 一次持久有效有状态的访问,由链接创建。

4、Destination & Queue:目标和队列
目的地。用于描述本次访问 ActiveMQ 的消息访问目的地,即 ActiveMQ 服务中的具体队列,由会话创建,interface Queue extends Destination

5、MessageProducer:
消息生成者,在一次有效会话中,用于发送消息给 ActiveMQ 服务的工具,由会话创建。

6、MessageConsumer:
消息消费者【消息订阅者,消息处理者】,在一次有效会话中,用于从 ActiveMQ 服务中获取消息的工具,由会话创建。

7、Message 
消息,通过消息生成者向 ActiveMQ 服务发送消息时使用的数据载体对象或消息消费者 从 ActiveMQ 服务中获取消息时使用的数据载体对象。是所有消息【文本消息,对象消息等】 具体类型的顶级接口,可以通过会话创建或通过会话从 ActiveMQ 服务中获取。

创建ActiveMQ的生产者和消费者进行测试。

需要注意,的生产者和消费者访问ActiveMQ服务的路径地址保持一致,访问的目的地保持一致。

创建ActiveMQ的生产者

1、创建Maven工程。
2、导入jar包,该jar包的版本号选择和ActiveMQ的版本号一致。
3、创建测试类。
	需要注意:导包的时候要导的是 javax.jms 下的包。
	3.1、创建连接工厂对象。	ConnectionFactory
	3.2、创建连接对象。	Connection
	3.3、创建Session对象。	Sesseion
	3.4、创建目的地		Destination
	3.5、定义消息提供者	MessageProducer
	3.6、定义消息		Message


public class HelloWolrdProducer {
	public void sendHelloWorldActiveMQ(String msgTest) {
		// 创建链接工厂对象
		ConnectionFactory connectionFactory = null;
		// 创建链接对象
		Connection connection = null;
		// 创建session对象
		Session session = null;
		// 目的地
		Destination destination = null;
		// 定义消息
		MessageProducer producer = null;
		// 定义消息
		Message message = null;
		try {
			/**
			 * userName:admin password:admin brokerURL:访问ActiveMQ服务的路径地址
			 */
			connectionFactory = new ActiveMQConnectionFactory("admin", "admin", "tcp://192.168.130.133:61616");
			// 创建连接对象
			connection = connectionFactory.createConnection();
			// 启动
			connection.start();
			// 创建session
			/**
			 * transacted:事务.类型boolean。true|false。
			 * true,开启事务,设置次变量值Session.SESSION_TRANSACTED false,不使用事务,设置次变量值,
			 * Session.AUTO_ACKNOWLEDGE:自动的向AtviceMQ发送一条确认信息,将队列中的这条消息移除。
			 * Session.CLIENT_ACKNOWLEDGE:客户端确认机制
			 * Session.DUPS_OK_ACKNOWLEDGE:有副本的客户端确认消息机制
			 */
			session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
			// 创建目的地,目的地名称即队列的名称。消息的消费者需要通过此名称访问对应的队列 。
			destination = session.createQueue("helloworld--destination");
			// 创建消息生产者
			producer = session.createProducer(destination);
			// 创建消息对象
			message = session.createTextMessage(msgTest);
			// 发送消息
			producer.send(message);
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			//关闭资源
			if(producer != null){
				try {
					producer.close();
				} catch (JMSException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(session != null){
				try {
					session.close();
				} catch (JMSException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(connection != null){
				try {
					connection.close();
				} catch (JMSException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}	
		}
	}
}

创建ActiveMQ消费者

1、创建Maven工程
2、添加ActiveMQ的坐标。
3、测试类。
	在生产者的基础上改动了,
		把消息的生产者对象改为消息的消费者
		把消息对象改为接收。


public class HelloWolrdConsumer {
	public void readHelloWorldActiveMQ() {
		// 创建链接工厂对象
		ConnectionFactory connectionFactory = null;
		// 创建链接对象
		Connection connection = null;
		// 创建session对象
		Session session = null;
		// 目的地
		Destination destination = null;
		// 定义消息提供者
		MessageConsumer consumer = null;
		// 定义消息
		Message message = null;
		try {
			/**
			 * userName:admin password:admin brokerURL:访问ActiveMQ服务的路径地址
			 */
			connectionFactory = new ActiveMQConnectionFactory("admin", "admin", "tcp://192.168.130.133:61616");
			// 创建连接对象
			connection = connectionFactory.createConnection();
			// 启动
			connection.start();
			// 创建session
			/**
			 * transacted:事务.类型boolean。true|false。
			 * true,开启事务,设置次变量值Session.SESSION_TRANSACTED false,不使用事务,设置次变量值,
			 * Session.AUTO_ACKNOWLEDGE:自动的向AtviceMQ发送一条确认信息,将队列中的这条消息移除。
			 * Session.CLIENT_ACKNOWLEDGE:客户端确认机制
			 * Session.DUPS_OK_ACKNOWLEDGE:有副本的客户端确认消息机制
			 */
			session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
			// 创建目的地,目的地名称即队列的名称。消息的消费者需要通过此名称访问对应的队列 。
			destination = session.createQueue("helloworld--destination");
			// 创建消息消费者
			consumer = session.createConsumer(destination);
			// 创建消息对象
			message = consumer.receive();
			
			//处理消息
			String msg = ((TextMessage)message).getText();
			System.out.println("从 ActiveMQ 服务中获取的文本信息 "+msg);		
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 关闭资源
			if (consumer != null) {
				try {
					consumer.close();
				} catch (JMSException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if (session != null) {
				try {
					session.close();
				} catch (JMSException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if (connection != null) {
				try {
					connection.close();
				} catch (JMSException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}
}

创建生产者测试类,并启动。

93e328d8db678e643c1346a2d3c7820d.png

访问ActiveMQ的管理平台

9eb50a93b90f4c8ef40960daecac3858.png


创建消费者测试类

302ae6b6b7c1718fcc3422c39e3383a0.png

此时ActiveMQ中的消息已经被获取到了。

f9cacc34584c532596b631b982faf19e.png

ActiveMQ发送对象消息

在原有的代码基础上部分改动

1、如果要获取对象消息,那么在工程中需要对生产者和消费者的实体类都进行序列化,并且生成序列化id。

2、消息生产者在生产消息时,将消息的创建改为创建createObjectMessage类型的,将消息对象作为参数传入createObjectMessage中发送给ActiceMQ.

3、消息消费者获取一个Obj类型的消息,调用get方法获取该消息,并将该消息强制转换为对象类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值