ActiveMQ


ActiveMQ是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ是一个完全支持JMS1.和J2EE1.4规范的JMS Provider实现尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍扮演着特殊的地位。
主要特点:
1. 多种语言和协议编写客户端。语言: Java, C, C++, C#, Ruby, Perl, Python, PHP。应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP
2. 完全支持JMS1.1和J2EE 1.4规范 (持久化,XA消息,事务)
3. 对Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性
4. 通过了常见J2EE服务器(如 Geronimo,JBoss 4, GlassFish,WebLogic)的测试,其中通过JCA 1.5 resource adaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE 1.4 商业服务器上
5. 支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
6. 支持通过JDBC和journal提供高速的消息持久化
7. 从设计上保证了高性能的集群,客户端-服务器,点对点
8. 支持Ajax
9. 支持与Axis的整合
10. 可以很容易得调用内嵌JMS provider,进行测试
ActiveMQ的消息形式:
一种是点对点的,即一个生产者和一个消费者一一对应;
另一种是发布/订阅模式,即一个生产者产生消息并进行发送后,可以由多个消费者进行接收。
安装步骤
第一步: 把ActiveMQ 的压缩包上传到Linux系统。
第二步:解压缩。
第三步:启动。
使用bin目录下的activemq命令启动:
[root@localhost bin]# ./activemq start
关闭:
[root@localhost bin]# ./activemq stop
查看状态:
[root@localhost bin]# ./activemq status
进入管理后台:用户名:admin,密码:admin
Queue的Producer测试
第一步:创建ConnectionFactory对象,需要指定服务端ip及端口号。
第二步:使用ConnectionFactory对象创建一个Connection对象。
第三步:开启连接,调用Connection对象的start方法。
第四步:使用Connection对象创建一个Session对象。
第五步:使用Session对象创建一个Destination对象(topic、queue),此处创建一个Queue对象。
第六步:使用Session对象创建一个Producer对象。
第七步:创建一个Message对象,创建一个TextMessage对象。
第八步:使用Producer对象发送消息。

第九步:关闭资源。

@Test
	public void testQueueProducer() throws Exception {
		//1、创建一个连接工厂对象,需要指定服务的ip及端口。
		ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.137.2:61616");
		//2、使用工厂对象创建一个Connection对象。
		Connection connection = connectionFactory.createConnection();
		//3、开启连接,调用Connection对象的start方法。
		connection.start();
		//4、创建一个Session对象。
		//第一个参数:是否开启事务。如果true开启事务,第二个参数无意义。一般不开启事务false。
		//第二个参数:应答模式。自动应答或者手动应答。一般自动应答。
		Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
		//5、使用Session对象创建一个Destination对象。两种形式queue、topic,现在应该使用queue
		Queue queue = session.createQueue("test-queue");
		//6、使用Session对象创建一个Producer对象。
		MessageProducer producer = session.createProducer(queue);
		//7、创建一个Message对象,可以使用TextMessage。
		/*TextMessage textMessage = new ActiveMQTextMessage();
		textMessage.setText("hello Activemq");*/
		TextMessage textMessage = session.createTextMessage("hello activemq");
		//8、发送消息
		producer.send(textMessage);
		//9、关闭资源
		producer.close();
		session.close();
		connection.close();
	}
Queue的Consumer
消费者:接收消息。
第一步:创建一个ConnectionFactory对象。
第二步:从ConnectionFactory对象中获得一个Connection对象。
第三步:开启连接。调用Connection对象的start方法。
第四步:使用Connection对象创建一个Session对象。
第五步:使用Session对象创建一个Destination对象。和发送端保持一致queue,并且队列的名称一致。
第六步:使用Session对象创建一个Consumer对象。
第七步:接收消息。
第八步:打印消息。

第九步:关闭资源

@Test
	public void testQueueConsumer() throws JMSException, IOException{
		//创建一个connectionfactory对象连接MQ服务器
		ConnectionFactory connectionFactory=new ActiveMQConnectionFactory("tcp://192.168.137.2:61616");
		//创建一个链接对象
		Connection connection=connectionFactory.createConnection();
		//开启连接
		connection.start();
		//使用连接对象connection创建一个session对象
		Session session=connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
		//创建一个destination对象,queue对象
		Queue queue=session.createQueue("test-queue");
		//使用session对象创建一个消费者对象
		MessageConsumer consumer=session.createConsumer(queue);
		//接受消息
		consumer.setMessageListener(new MessageListener(){
			@Override
			public void onMessage(Message message) {
				// 打印结果
				TextMessage textMessage=(TextMessage) message;
				String text;
				try{
					text=textMessage.getText();
					System.out.println(text);
				}catch(JMSException e){
					e.printStackTrace();
				}
			}
			
		});
		//等待接受消息
		System.in.read();
		//打印结果
		//关闭资源
		consumer.close();
		session.close();
		connection.close();
	}
Topic的producer:
@Test
	public void testTopicProducer() throws JMSException{
		ConnectionFactory connectionFactory=new ActiveMQConnectionFactory("tcp://192.168.137.2:61616");
		Connection connection=connectionFactory.createConnection();
		connection.start();
		Session session=connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
		Topic topic=session.createTopic("test-topic");
		MessageProducer producer=session.createProducer(topic);
		TextMessage textMessage=session.createTextMessage("topic message");
		producer.send(textMessage);
		producer.close();
		session.close();
		connection.close();
	}
Consumer:
@Test
	public void testTopicCunsumer() throws JMSException, IOException{
		ConnectionFactory connectionFactory=new ActiveMQConnectionFactory("tcp://192.168.137.2:61616");
		Connection connection=connectionFactory.createConnection();
		connection.start();
		Session session=connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
		Topic topic=session.createTopic("test-topic");
		MessageConsumer consumer=session.createConsumer(topic);
		consumer.setMessageListener(new MessageListener(){
			@Override
			public void onMessage(Message message) {
				//打印结果
				TextMessage textMessage=(TextMessage) message;
				String text;
				try{
					text=textMessage.getText();
					System.out.println(text);
				}catch(JMSException e){
					e.printStackTrace();
				}				
			}			
		});
		System.out.println("topic的消费者");
		System.in.read();
		consumer.close();
		session.close();
		connection.close();
	}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值