Activemq消息队列

activemq是由apache出品的,是强劲的开源消息总线,支持多种传输协议:in-VM,TCP,SSL,NIO,UDP,JGROUPS,JXTA。

windows环境下,下载解压软件包,点击bin目录下的activemq.bat

linux环境下,运行bin下的命令,./activemq.setup

此时使用的默认服务端口是61616和默认console端口8161。

修改端口,就在conf/activemq.xml中修改

修改console端口8161

activemq如何和spring结合,不要使用5.12.0,建议使用5.11.2或者5.11.1。

Number Of Consumers  消费者 这个是消费者端的消费者数量

Number Of Pending Messages 等待消费的消息 这个是当前未出队列的数量。可以理解为总接收数-总出队列数
Messages Enqueued 进入队列的消息  进入队列的总数量,包括出队列的。 这个数量只增不减
Messages Dequeued 出了队列的消息  可以理解为是消费这消费掉的数量
这个要分两种情况理解
在queues里它和进入队列的总数量相等(因为一个消息只会被成功消费一次),如果暂时不等是因为消费者还没来得及消费。
在 topics里 它因为多消费者从而导致数量会比入队列数高。
简单的理解上面的意思就是
当有一个消息进入这个队列时,等待消费的消息是1,进入队列的消息是1。
当消息消费后,等待消费的消息是0,进入队列的消息是1,出队列的消息是1.
在来一条消息时,等待消费的消息是1,进入队列的消息就是2.

没有消费者时  Pending Messages   和 入队列数量一样
有消费者消费的时候 Pedding会减少 出队列会增加
到最后 就是 入队列和出队列的数量一样多
以此类推,进入队列的消息和出队列的消息是池子,等待消费的消息是水流。 

MOM 就是面向消息中间件(Message-oriented middleware),是用于以分布式应用或系统中的异步、松耦合、可靠、可扩展和安全通信的一类软件。MOM 的总体思想是它作为消息发送器和消息接收器之间的消息中介,这种中介提供了一个全新水平的松耦合。

activemq的消息形式有:

queue:一对一

topic:一对多

Activemq是实现了JMS规范的系统间远程通信代理,JMS JAVA message service java消息服务。

Domains:消息传递方式,包括点对点(P2P)、发布/订阅(Pub/Sub)两种,P2P也就是以queue作为Destination,一个消息只能被一个消息消费者接收。pub/sub使用topic作为destination,发布者向topic发布消息,订阅者接收来自topic的消息,发送到topic的任何消息,都会自动传递给订阅者。

ActiveMq实例:这里消息形式是以topic形式发送的,客户端有多个监听者,可以接收到生产者的广播消息

消息接收者:

package activemq;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;

import org.apache.activemq.ActiveMQConnectionFactory;

public class Consumer {

    public static void main(String[] args) throws Exception{

        //创建连接工厂
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("admin", "admin", "tcp://localhost:61616");
        //创建连接
        Connection connection = connectionFactory.createConnection();
        //消费者启动连接
        connection.start();
        //会话
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        //获取消息队列
        Topic queue = session.createTopic("topic1018");
        //创建消息消费者
        MessageConsumer consumer = session.createConsumer(queue);
        //向消费者设置监听
        consumer.setMessageListener(new MessageListener() {
            @Override
            public void onMessage(Message message){
                
                if(message instanceof TextMessage){
                    System.out.println("消费者接收到消息:"+message);
                }
            }
        });
        
        System.in.read();
        //依次关闭连接
        consumer.close();
        session.close();
        connection.close();
    }

}
 

消息生产者:

package activemq;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;

import org.apache.activemq.ActiveMQConnectionFactory;

public class TopicProduce {

    public static void main(String[] args) throws Exception{

        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("admin", "admin", "tcp://localhost:61616");
        Connection connection = connectionFactory.createConnection();
        //false表示本次会话不会开启事务
        /*
         * AUTO_ACKNOWLEDGE:自动确认 
          CLIENT_ACKNOWLEDGE:客户端确认 
          SESSION_TRANSACTED:事务确认,如果使用事务推荐使用该确认机制 
          AUTO_ACKNOWLEDGE:懒散式确认,消息偶尔不会被确认,也就是消息可能会被重复发送.但发生的概率很小 */
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        Topic topic = session.createTopic("topic1018");
        MessageProducer producer = session.createProducer(topic);
        TextMessage textMessage = session.createTextMessage("群发通知7");
        producer.send(textMessage);
        producer.close();
        session.close();
        connection.close();
    }

}
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值