ActiveMQ(一)

一:传统RPC中间件的缺点:corba、dcom、RMI

  1. 同步通讯:客户发出请求后,必须等待服务对象完成处理并返回结果后才能执行。
  2. 客户和服务对象的生命周期紧密耦合:客户进程和服务对象进程都必须正常运行;如果由于服务器对象崩溃或者网络故障导致客户的请求不可达,客户会接到异常。
  3. 点对点通讯:客户的一次调用只发送给服务器某个单独的目标对象。

二:面向消息的中间件Message Oriented Middleware ,MOM介绍

  1. 较好的解决了传统RPC的不足,发送者将消息发送给消息服务器,消息服务器将消息存放在若干队列中,在合适的时候再将消息转发给接受者。这种模式下,发送和接受都是异步的,发送者无需等待,二者的生命周期必须相同。发送消息时接受者不一定运行,接受消息的时候发送者也不一定运行。
  2. 一对多通讯:对于一个消息可以有多个接受者。

三:JMS简介

  1. java消息服务(JMS)定义了Java中访问消息中间件的接口。也就是说JMS知识接口,并没有给与实现。实现JMS接口的消息中间件称为JMS Provider,Apatche的ActiveMQ就是属于MOM中间件的一种,JMS接口的实现。
  2. JMS术语:JMS实现了JMS接口的消息中间件。Provider(Message provider)-生产者;Consumer(Message Comsumer)-消费者;PTP(point to point)-点对点的消息模型;Pub/Sub(Publish/Subscribe)-即发布/订阅的消息模型;Queue-队列目标;Topic-主题目标;ConnectionFactory-连接工厂,JMS用它创建连接;Connection-JMS客户端到JMS Provider的连接点;Destination-消息的目的地;Session-会话,一个发送或接受消息的线程;Message接口-消费者和生产者之间产生的对象。该对象包括三部分组成:1.消息头(必须):识别和为消息寻找漏由的操作设置。2.一组消息属性(可选):包含额外属性,支持其他提供者和用户兼容。可以创建定制的字段和过滤器(消息选择器)。3.一个消息体(可选):允许用户创建5种类型的消息(StreamMessage-java原始值的数据流,MapMessage-名称-值对,TextMessage-一串字符串对象,ObjectMessage-一个序列化的java对象,BytesMessage-一个未解析的字节数据流)

四:activeMQ介绍

向中间件中添加数据:

public class Sender {
	public static void main(String[] args) throws Exception {
		// 1创建连接工厂
		ConnectionFactory connectionFactory = new org.apache.activemq.ActiveMQConnectionFactory(
				ActiveMQConnectionFactory.DEFAULT_USER, ActiveMQConnectionFactory.DEFAULT_PASSWORD,
				ActiveMQConnectionFactory.DEFAULT_BROKER_URL);
		// 2通过连接工厂创建连接,并开启连接
		Connection connection = connectionFactory.createConnection();
		connection.start();
		// 3创建session回话1.是否启动事物,2.签收模式
		Session session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);
		// 4创建目标对象在p2p模式中目的地被称为Queue,pb模式下被称为Topic
		Destination destination = session.createQueue("queue1");
		// 5通过session创建生产者或消费者Messageproducer/MessageConsumer
		MessageProducer messageProvider = session.createProducer(destination);
		// 6设置持久化存储特性,是否持久化存储或者临时存储
		messageProvider.setDeliveryMode(DeliveryMode.NON_PERSISTENT);// 非持久化
		// 7创建数据对象,messageProvider发送该数据,供消费者使用
		for (int i = 0; i < 5; i++) {
			TextMessage textMessage = session.createTextMessage();
			textMessage.setText("我是消息内容," + i);
			// 发送消息
			messageProvider.send(textMessage);
		}
		if (connection != null) {
			connection.close();
		}
	}

获取中间件中存放的数据:

public class Sender {
	public static void main(String[] args) throws Exception {
		// 1创建连接工厂
		ConnectionFactory connectionFactory = new org.apache.activemq.ActiveMQConnectionFactory(
				ActiveMQConnectionFactory.DEFAULT_USER, ActiveMQConnectionFactory.DEFAULT_PASSWORD,
				ActiveMQConnectionFactory.DEFAULT_BROKER_URL);
		// 2通过连接工厂创建连接,并开启连接
		Connection connection = connectionFactory.createConnection();
		connection.start();
		// 3创建session回话1.是否启动事物,2.签收模式
		Session session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);
		// 4创建目标对象在p2p模式中目的地被称为Queue,pb模式下被称为Topic
		Destination destination = session.createQueue("queue1");
		// 5通过session创建生产者或消费者Messageproducer/MessageConsumer
		MessageProducer messageProvider = session.createProducer(destination);
		// 6设置持久化存储特性,是否持久化存储或者临时存储
		messageProvider.setDeliveryMode(DeliveryMode.NON_PERSISTENT);// 非持久化
		// 7创建数据对象,messageProvider发送该数据,供消费者使用
		for (int i = 0; i < 5; i++) {
			TextMessage textMessage = session.createTextMessage();
			textMessage.setText("我是消息内容," + i);
			// 发送消息
			messageProvider.send(textMessage);
		}
		if (connection != null) {
			connection.close();
		}
	}

 

 

转载于:https://my.oschina.net/2286252881/blog/854005

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值