zoukankan      html  css  js  c++  java
  • activemq 消息阻塞优化和消息确认机制优化

    一、消息阻塞优化

    1.activemq消费者在从待消费队列中获取消息是会先进行预读取,默认是1000条(prefetch=1000)。这样很容易造成消息积压。

    2.可以通过设置prefetch的默认值来调整预读取条数,java代码如下

    //设置预读取为1
    ActiveMQPrefetchPolicy p = new ActiveMQPrefetchPolicy();
    p.setQueuePrefetch(1);
    //创建一个链接工厂
    connectionFactory = new ActiveMQConnectionFactory(username, pwd, url_one);
    //设置预读取为1
    connectionFactory.setPrefetchPolicy(p);
    //从工厂中创建一个链接
    connection = (ActiveMQConnection) connectionFactory.createConnection();
    //启动链接
    connection.start();
    //创建一个事物session
    session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
    queue = session.createQueue(queueResponse);
    consumer = session.createConsumer(queue);
    //设置消息监听器
    consumer.setMessageListener(new ReceiveListener());


    二、消息确认机制优化
    1.activemq默认是自动确认消费机制,即消费者接收了此消息,此消息便从待消费队列中剔除,进入已消费队列。
    2.我们可以将消费确认模式改成手动确认。java代码如下:
    //创建一个事物session
    session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);


        createSession(paramA,paramB);

        paramA 取值有 : true or false 表示是否支持事务 
        paramB 取值有:Session.AUTO_ACKNOWLEDGE,Session.CLIENT_ACKNOWLEDGE,DUPS_OK_ACKNOWLEDGE,SESSION_TRANSACTE

     createSession(paramA,paramB); 
        paramA是设置事务的,paramB设置acknowledgment mode 
        paramA设置为false时:paramB的值可为Session.AUTO_ACKNOWLEDGE,Session.CLIENT_ACKNOWLEDGE,DUPS_OK_ACKNOWLEDGE其中一个。 
        paramA设置为true时:paramB的值忽略, acknowledgment mode被jms服务器设置为SESSION_TRANSACTED 。 
        Session.AUTO_ACKNOWLEDGE为自动确认,客户端发送和接收消息不需要做额外的工作。 
        Session.CLIENT_ACKNOWLEDGE为客户端确认。客户端接收到消息后,必须调用javax.jms.Message的acknowledge方法。jms服务器才会删除消息。 
        DUPS_OK_ACKNOWLEDGE允许副本的确认模式。一旦接收方应用程序的方法调用从处理消息处返回,会话对象就会确认消息的接收;而且允许重复确认。在需要考虑资源使用时,这种模式非常有效。

     3.然后在消费者监听器中,调用

        msg.acknowledge(); 
    方法来手动返回消费确认标志。代码如下:
      @Override

      public void onMessage(Message message) {
        TextMessage msg = (TextMessage) message;

        //do something

        msg.acknowledge(); 


      }





        

  • 相关阅读:
    互联网对实体经济的三轮冲击
    虎嗅网
    RabbitMQ实战-死信队列
    RabbitMQ实战
    Hadoop之MapReduce流程
    Hadoop之HDFS读写流程
    GitHub预览网页[2019最新]
    Java操作Hadoop集群
    Hadoop分布式集群搭建
    Hadoop Local(本地)模式搭建
  • 原文地址:https://www.cnblogs.com/raymond-yan/p/10449646.html
Copyright © 2011-2022 走看看