RectiveMq入门总结

1.生产者和消费者之间有时间上的相关性。订阅一个主题的消费者只能消费自它订阅之后发布的消息。JMS 规范允许客户创建持久订阅,这在一定程度上放松了时间上的相关性要求。持久订阅允许消费者消费它在未处于激活状态时发送的消息。
2.订阅者一和订阅者二都能收到一样的消息,也就是说在发布订阅模式下,一份消息可以被多个消费者消费
消息相关概念
消息类型

JMS 消息由以下三部分组成:
 消息头。每个消息头字段都有相应的getter 和setter 方法。
 消息属性。如果需要除消息头字段以外的值,那么可以使用消息属性。
 消息体。消息主题内容,JMS定义消息包括TextMessage、MapMessage、BytesMessage、StreamMessage、ObjectMessage类型
消息确认
JMS 消息只有在被确认之后,才认为已经被成功地消费了。消息的成功消费通
常包含三个阶段:客户接收消息、客户处理消息和消息被确认。
在事务性会话中,当一个事务被提交的时候,确认自动发生。在非事务性会
话中,消息何时被确认取决于创建会话时的应答模式(acknowledgementmode)。
该参数有以下三个可选值:
Session.AUTO_ACKNOWLEDGE。当客户成功的从receive方法返回的时候,
或者从MessageListener.onMessage 方法成功返回的时候,会话自动确认
客户收到的消息。
 Session.CLIENT_ACKNOWLEDGE。客户通过消息的acknowledge 方法确认消
息。需要注意的是,在这种模式中,确认是在会话层上进行:确认一个被
消费的消息将自动确认所有已被会话消费的消息。例如,如果一个消息消
费者消费了10 个消息,然后确认第5 个消息,那么所有10 个消息都被确
认。
 Session.DUPS_ACKNOWLEDGE。该选择只是会话迟钝的确认消息的提交。如
果JMS provider 失败,那么可能会导致一些重复的消息。如果是重复的
消息,那么JMS provider 必须把消息头的JMSRedelivered 字段设置为
true。
消息持久化
AMQ Message Store
AMQ Message Store 是ActiveMQ5.0缺省的持久化存储。Message commands 被
保存到transactional journal(由rolling data logs 组成)。Messages 被保
存到data logs 中,同时被reference store 进行索引以提高存取速度。Date logs
由一些单独的data log 文件组成,缺省的文件大小是32M,如果某个消息的大
小超过了data log 文件的大小,那么可以修改配置以增加data log 文件的大小。

本人在学习RectiveMq的道路上遇见的一些问题,查询各种资料,把解决的办法总结。欢迎大家互相讨论,谢谢。

欢迎大家加群 进行讨论 qq群:714398799

  1. 去官网下载linux的RectiveMq。
    http://activemq.apache.org/activemq-5140-release.html
    在这里插入图片描述

  2. 把下载好的文件放在linux的opt目录下(opt目录是专门存放第三方软件的目录)

  3. 解压
    tar -zxvf apache-activemq-5.14.0-bin.tar.gz

  4. 建立文件夹 activemq
    mkdir activemq

  5. 移动解压好的文件并重命名
    mv xxxx activemq

  6. 普通启动
    ./activemq start

  7. 关闭
    ./activemq stop

  8. 重启
    ./activemq restart

  9. 查看端口
    ps -ef|grep activemq |grep -v grep
    netstat -anp|grep 61616

  10. 测试访问
    win:192.168.x.xx
    linux:192.168.xxx.x
    通过 ping ip 测试网络通
    保证 linux服务器 防火墙关闭
    本地电脑也要关闭防火墙

  11. 创建maven项目引入maven

<dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>activemq-all</artifactId>
    <version>5.14.4</version>
</dependency>
  1. 创建生产者
//linux服务器
private static final String BROKER_URL = "tcp://192.xx.xxx.xx8:61616";
private static final String producer = "queue";
public static void main(String[] args) throws JMSException {
    //建立生产者
    ActiveMQConnectionFactory connectionFaction = new ActiveMQConnectionFactory(BROKER_URL);
    Connection connection = connectionFaction.createConnection();
    connection.start();
    Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
    Queue queue = session.createQueue(producer);
    MessageProducer producer = session.createProducer(queue);
    for (int i=0;i<3;i++){
        TextMessage textMessage = session.createTextMessage("msg-----" + i);
        producer.send(textMessage);
    }
    producer.close();
    session.close();
    connection.close();
    System.out.println("send msg success");
}
  1. 通过activeMq8161端口来看你写的消息
    在这里插入图片描述

14.创建消费者

private static final String BROKER_URL = "tcp://192.168.xxx.xxx:61616";
private static final String producer = "queue";
public static void main(String[] args) throws JMSException {
    ActiveMQConnectionFactory connectionFaction = new ActiveMQConnectionFactory(BROKER_URL);
    Connection connection = connectionFaction.createConnection();
    connection.start();
    Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
    //创建
    Queue queue = session.createQueue(producer);
    MessageConsumer consumer = session.createConsumer(queue);

    while (true){
        TextMessage receive = (TextMessage)consumer.receive();
        if(null != receive){
            System.out.println(receive.getText());
        }else{
            break;
        }
    }
    consumer.close();
    session.close();
    connection.close();
    System.out.println("成功消费mq");
}

执行完毕后,在管理界面,可以看到自己的信息个数,被消费了,消费者数量。

注意

  • 如果需要把消息存储mysql,需要把mysql驱动包放在activemq的lib下
  • 我在安装的过程中,遇见的关闭linux服务器防火墙,关闭方法按照百度的方法为 service iptables stop,最后原来因为是,centos7之后的关闭防火墙方法为

关闭防火墙
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
开启端口
firewall-cmd --zone=public --add-port=80/tcp --permanent

  • Queue(点到点)模式
    在点对点的传输方式中,消息数据被持久化,每条消息都能被消费,没有监听QUEUE地址也能被消费,数据不会丢失,一对一的发布接受策略,保证数据完整
  • 主题模式
    一对多的传输方式
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章