ActiveMQ入门发送接收消息

本文介绍了ActiveMQ作为Java消息服务(JMS)提供商的基本概念和功能,包括点对点(Queue)和发布/订阅(Topic)两种消息传递模型。同时,文章提供了ActiveMQ的特性概述,如支持多种语言和协议、完全兼容JMS1.1规范、高性能的集群等,并讨论了何时考虑使用ActiveMQ来实现系统集成和解耦。
摘要由CSDN通过智能技术生成

由于ActiveMQ是一个独立的jms provider,JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。

ActiveMQ官网下载地址:http://activemq.apache.org/download.html

队列(Queue)和主题(Topic)是JMS支持的两种消息传递模型:
1、点对点(point-to-point,简称PTP)Queue消息传递模型:
通过该消息传递模型,一个应用程序(即消息生产者)可以向另外一个应用程序(即消息消费者)发送消息。在此传递模型中,消息目的地类型是队列(即Destination接口实现类实例由Session接口实现类实例通过调用其createQueue方法并传入队列名称而创建)。消息首先被传送至消息服务器端特定的队列中,然后从此对列中将消息传送至对此队列进行监听的某个消费者。同一个队列可以关联多个消息生产者和消息消费者,但一条消息仅能传递给一个消息消费者。如果多个消息消费者正在监听队列上的消息,,JMS消息服务器将根据“先来者优先”的原则确定由哪个消息消费者接收下一条消息。如果没有消息消费者在监听队列,消息将保留在队列中,直至消息消费者连接到队列为止。

2、发布/订阅(publish/subscribe,简称pub/sub)Topic消息传递模型:
通过该消息传递模型,应用程序能够将一条消息发送给多个消息消费者。在此传送模型中,消息目的地类型是主题(即Destination接口实现类实例由Session接口实现类实例通过调用其createTopic方法并传入主题名称而创建)。消息首先由消息生产者发布至消息服务器中特定的主题中,然后由消息服务器将消息传送至所有已订阅此主题的消费者。主题目标也支持长期订阅。长期订阅表示消费者已注册了主题目标,但在消息到达目标时该消费者可以处于非活动状态。当消费者再次处于活动状态时,将会接收该消息。如果消费者均没有注册某个主题目标,该主题只保留注册了长期订阅的非活动消费者的消息。与PTP消息传递模型不同,pub/sub消息传递模型允许多个主题订阅者接收同一条消息。JMS一直保留消息,直至所有主题订阅者都接收到消息为止。pub/sub消息传递模型基本上是一个推模型。在该模型中,消息会自动广播,消息消费者无须通过主动请求或轮询主题的方法来获得新的消息。

在这里插入图片描述
案例:

1、生产者

package com.activeMQ;
    
    
    import java.util.concurrent.atomic.AtomicInteger;
    
    import javax.jms.Connection;
    import javax.jms.ConnectionFactory;
    import javax.jms.JMSException;
    import javax.jms.MessageProducer;
    import javax.jms.Queue;
    import javax.jms.Session;
    import javax.jms.TextMessage;
    import javax.jms.Topic;
    
    import org.apache.activemq.ActiveMQConnection;
    import org.apache.activemq.ActiveMQConnectionFactory;
    
    public class Producter {
   
    	//默认登录用户
    	private static final String USERNAME = ActiveMQConnection.DEFAULT_USER;
    	//默认登录密码
    	private static final String USERPASSWORD = ActiveMQConnection.DEFAULT_PASSWORD;
    	//默认登录路径
    	private static final String USERURL = ActiveMQConnection.DEFAULT_BROKER_URL;
    	
    	//线程安全 计数
    	AtomicInteger count = new AtomicInteger(0);
    	//连接工厂
    	ConnectionFactory connectionFactory;
    	//连接对象
    	Connection connection;
    	//事务管理
    	Session session;
    	ThreadLocal<MessageProducer> threadLocal =new ThreadLocal<>();
    	public void init() {
   
    		//创建连接工厂
    		connectionFactory = new ActiveMQConnectionFactory(USERNAME, USERPASSWORD, USERURL);
    	    //获取连接对象
    		try {
   
    			connection = (Connection) connectionFactory.createConnection();
    			//开启连接
    			connection.start();
    			//创建一个事务
                       /**
                       //createSession方法里有两个参数,第一个参数表示是否使用事务,第二个参数表示消息的确认模式。消息的确认模式共有4种:
                                   // 1:AUTO_ACKNOWLEDGE 自动确认
                                  // 2:CLIENT_ACKNOWLEDGE 客户端手动确认 
                                 // 3:DUPS_OK_ACKNOWLEDGE 自动批量确认
                               //  0:SESSION_TRANSACTED 事务提交并确认**/
                               //4:INDIVIDUAL_ACKNOWLEDGE 单条消息确认 为AcitveMQ自定义的ACK_MODE
    			session = connection.createSession(true, Session.SESSION_TRANSACTED);
    		} catch ( Exception e) {
   
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    	//消息对列
    	public void sendMessage(String str) {
   
    		try {
   
    			//创建一个消息队列
    			Queue queue = session.createQueue(str);
    			//消息生产者
    			MessageProducer messageProducer = null;
    			if(threadLocal.get()!=null) {
   
    				messageProducer = threadLocal.get();
    			}else {
   
    				messageProducer = session.createProducer(queue);
    				threadLocal.set(messageProducer);
    			}
    			while( true) {
   
    				//线程睡眠1s
    				Thread.sleep(</
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值