Queue consumer limit

Here is the scenario:
-simple producer app, sending in to a Queue a lot of simple text messages
-there are 3 MDB's listening to the same (!) queue and dumping message to server.log
by checking output of glassfish server.log it seems that MQ is using only 2 of those MDB's at a time (2 simultaneous consumers).
How (w/o switching to Topic) would it be possible to increase simultaneous processing capabilities of glassfish (v2 UR1 Final) bundled MQ ?
/mareks

Queue gets a lot of messages sent in by (multiple) clients. The question is why glassfish/mq is processing only 2 consumers only at a time ? Tried playing with maxNumActiveConsumers set to -1 and consumerFlowLimit to 1 - same thing.
/mareks

Similar Messages

  • Memory Leak, Receiver Got Null Message & Consumer limit exceeded on destina

    When running program that adds an Object message to a JMS queue and then recieves it. I get the following.
    1) interminitent NULL messages recieved.
    2) jms.JMSException: [C4073]: Consumer limit exceeded on destination interactionQueueDest. Even though only one receiver can be receiving via the supplied program.
    3) After many message are added to the queue 1000's the Message Queue goes to Out Of Memory exception. It should swap to disk!!
    STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
    RUN this program via a JSP call in the application server.
    JSP
    <%@ page language="java" import="jms.*"%>
    <html>
    <head>
    <title>Leak Memory</title>
    </head>
    <body>
    <hr/>
    <h1>Leak Memory</h1>
    <%
       LeakMemory leakMemory = new LeakMemory();
       leakMemory.runTest(10000,1000);
      // NOTE will brake but slower with setting leakMemory.runTest(10000,100);
    %>JMS resources must be created:
    jms/queueConnectionFactory
    jms/interactionQueue
    must be created first.
    Class:
    package jms;
    import javax.naming.*;
    import javax.jms.*;
    public class LeakMemory implements Runnable {
      private QueueConnectionFactory queueConnectionFactory = null;
      private Queue interactionQueue = null;
      private boolean receiverRun = true;
      private QueueConnection queueConnection;
      private int totalMessageInQueue = 0;
      public LeakMemory() {
        init();
       * initialize queues
      public void init(){
        try {
          InitialContext context = new InitialContext();
          this.queueConnectionFactory = (QueueConnectionFactory)context.lookup("jms/queueConnectionFactory");
          this.interactionQueue = (Queue) context.lookup("jms/interactionQueue");
        catch (NamingException ex) {
          printerError(ex);
      public void runTest(int messageCount, int messageSize){
        this.receiverRun = true;
        Thread receiverThread = new Thread(this);
        receiverThread.start();
        for (int i = 0; i < messageCount; i++) {
            StringBuffer messageToSend = new StringBuffer();
            for (int ii = 0; ii < messageSize; ii++) {
              messageToSend.append("0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789\n");
            QueueConnection queueConnectionAdder = null;
            QueueSession queueInteractionSession = null;
            QueueSender interactionQueueSender = null;
            try {
                //Get a queue connection
                queueConnectionAdder = this.getQueueConnection();
                queueInteractionSession = queueConnectionAdder.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
                interactionQueueSender = queueInteractionSession.createSender(this.interactionQueue);
                ObjectMessage objectMessage = queueInteractionSession.createObjectMessage(messageToSend);
                objectMessage.setStringProperty("PROPERTY", "" + System.currentTimeMillis());
                //Send object
                interactionQueueSender.send(objectMessage,DeliveryMode.PERSISTENT,5,0);
                totalMessageInQueue++;
                //Close Resources
                interactionQueueSender.close();
                queueInteractionSession.close();
                interactionQueueSender = null;
                queueInteractionSession = null;
            } catch (JMSException ex) {
               printerError(ex);
       * run
      public void run()  {
        while(this.receiverRun){
                try {
                  QueueSession interactionQueueSession = this.getQueueConnection().createQueueSession(false, Session.CLIENT_ACKNOWLEDGE);
                  QueueReceiver queueReceiver = interactionQueueSession.createReceiver(this.interactionQueue);
                  ObjectMessage message = (ObjectMessage)queueReceiver.receive(100);
                  if(message != null){
                    StringBuffer messageRecived = (StringBuffer)message.getObject();
                    //Simulate Doing Something
                    synchronized (this) {
                      try {
                        Thread.sleep(400);
                      catch (InterruptedException ex1) {
                        //Can Safely be ignored
                    message.acknowledge();
                    totalMessageInQueue--;
                  } else {
                    printerError(new Exception("Receiver Got Null Message"));
                  queueReceiver.close();
                  interactionQueueSession.close();
                  queueReceiver = null;
                  interactionQueueSession = null;
                catch (JMSException ex) {
                  printerError(ex);
        * Get's the queue Connection and starts it
        * @return QueueConnection The queueConnection
       public synchronized QueueConnection getQueueConnection(){
           if (this.queueConnection == null) {
             try {
               this.queueConnection = this.queueConnectionFactory.createQueueConnection();
               this.queueConnection.start();
             catch (JMSException ex) {
               printerError(ex);
         return this.queueConnection;
       private void printerError(Exception ex){
         System.err.print("ERROR Exception totalMessageInQueue = " + this.totalMessageInQueue + "\n");
         ex.printStackTrace();
    }Is there something wrong with the way I'm working with JMS or is it just this unreliable in Sun App Server 7 Update 3 on windows?

    1) interminitent NULL messages recieved.Thanks that explains the behavior. It was wierd getting null messages when I know there is messages in the queue.
    2) jms.JMSException: [C4073]: Consumer limit exceeded
    on destination interactionQueueDest. Even though only
    one receiver can be receiving via the supplied
    program. No other instances, Only this program. Try it yourself!! It works everytime on Sun Application Server 7 update 2 & 3
    heres the broker dump at that error point
    [14/Apr/2004:12:51:47 BST] [B1065]: Accepting: [email protected]:3211->admin:3205. Count=1
    [14/Apr/2004:12:51:47 BST] [B1066]:   Closing: [email protected]:3211->admin:3205. Count=0
    [14/Apr/2004:12:52:20 BST] [B1065]: Accepting: [email protected]:3231->jms:3204. Count=1 [14/Apr/2004:12:53:31 BST] WARNING [B2009]: Creation of consumer  from connection [email protected]:3231 on destination interactionQueueDest failed:
    B4006: com.sun.messaging.jmq.jmsserver.util.BrokerException: [B4006]: Unable to attach to queue queue:single:interactionQueueDest: a primary queue is already active
    3) After many message are added to the queue 1000's
    the Message Queue goes to Out Of Memory exception. It
    should swap to disk!!The broker runs out of memory. Version in use
    Sun ONE Message Queue                   Copyright 2002
    Version:  3.0.1 SP2 (Build 4-a)              Sun Microsystems, Inc.
    Compile:  Fri 07/11/2003         All Rights ReservedOut of memory snippet
    [14/Apr/2004:13:08:28 BST] [B1089]: In low memory condition, Broker is attempting to free up resources
    [14/Apr/2004:13:08:28 BST] [B1088]: Entering Memory State [B0022]: YELLOW from previous state [B0021]: GREEN  - current memory is 118657K, 60% of total memory
    [14/Apr/2004:13:08:38 BST] WARNING [B2075]: Broker ran out of memory before the passed in VM maximum (-Xmx) 201326592 b,  lowering max to currently allocated memory (200431976 b ) and trying to recover [14/Apr/2004:13:08:38 BST] [B1089]: In low memory condition, Broker is attempting to free up resources
    [14/Apr/2004:13:08:38 BST] [B1088]: Entering Memory State [B0024]:  RED  from previous state [B0022]: YELLOW - current memory is 128796K, 99% of total memory [14/Apr/2004:13:08:38 BST] ERROR [B3008]: Message 2073-192.168.0.50(80:d:b6:c4:d6:73)-3319-1081944517772 exists in the store already [14/Apr/2004:13:08:38 BST] WARNING [B2011]: Storing of JMS message from IMQConn[AUTHENTICATED,[email protected]:3319,jms:3282] failed:
    com.sun.messaging.jmq.jmsserver.util.BrokerException: Message 2073-192.168.0.50(80:d:b6:c4:d6:73)-3319-1081944517772 exists in the store already
    [14/Apr/2004:13:08:38 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:38 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:39 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:39 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:39 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:39 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:40 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:40 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:40 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:40 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:41 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:42 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:42 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:42 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:42 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:43 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:43 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:43 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:43 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:44 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:44 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:44 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:45 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:45 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:46 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:46 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:47 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:47 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:47 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:47 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:48 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:49 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:49 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:49 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:49 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:50 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:50 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:50 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:50 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:51 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:51 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:51 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:51 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:52 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:52 BST] WARNING [B2076]: Broker is rejecting new producers, because it is extremely low on memory
    [14/Apr/2004:13:08:53 BST] ERROR [B3107]: Attempt to free memory failed, taking more drastic measures : java.lang.OutOfMemoryError
    [14/Apr/2004:13:08:53 BST] ERROR unable to deal w/ error: 1
    [14/Apr/2004:13:08:53 BST] ERROR TRYING TO CLOSE [14/Apr/2004:13:08:53 BST] ERROR DONE CLOSING
    [14/Apr/2004:13:08:53 BST] [B1066]:   Closing: [email protected]:3319->jms:3282. Count=0

  • Javax.jms.JMSException: [C4073]: Consumer limit exceeded on destination..

    I seem to be getting this with the JMS queue.
    javax.jms.JMSException: [C4073]: Consumer limit exceeded on destination notificationQueue
    one the call
    QueueReceiver subscriber = subSession.createReceiver(notificationQueue);
    Works fine in Jboss and Jonas App Servers.
    Stack Trace
    [08/Oct/2003:14:39:57] INFO ( 4936): CORE3282: stdout:      at com.sun.messaging.jmq.jmsclient.ProtocolHandler.addInterest(ProtocolHandler.java:1430)
    [08/Oct/2003:14:39:57] INFO ( 4936): CORE3282: stdout:      at com.sun.messaging.jmq.jmsclient.WriteChannel.addInterest(WriteChannel.java:55)
    [08/Oct/2003:14:39:57] INFO ( 4936): CORE3282: stdout:      at com.sun.messaging.jmq.jmsclient.ConnectionImpl.addInterest(ConnectionImpl.java:631)
    [08/Oct/2003:14:39:57] INFO ( 4936): CORE3282: stdout:      at com.sun.messaging.jmq.jmsclient.Consumer.registerInterest(Consumer.java:101)
    [08/Oct/2003:14:39:57] INFO ( 4936): CORE3282: stdout:      at com.sun.messaging.jmq.jmsclient.MessageConsumerImpl.addInterest(MessageConsumerImpl.java:127)
    [08/Oct/2003:14:39:57] INFO ( 4936): CORE3282: stdout:      at com.sun.messaging.jmq.jmsclient.MessageConsumerImpl.init(MessageConsumerImpl.java:122)
    [08/Oct/2003:14:39:57] INFO ( 4936): CORE3282: stdout:      at com.sun.messaging.jmq.jmsclient.QueueReceiverImpl.<init>(QueueReceiverImpl.java:40)
    [08/Oct/2003:14:39:57] INFO ( 4936): CORE3282: stdout:      at com.sun.messaging.jmq.jmsclient.UnifiedSessionImpl.createReceiver(UnifiedSessionImpl.java:83)
    [08/Oct/2003:14:39:57] INFO ( 4936): CORE3282: stdout:      at com.sun.enterprise.jms.SessionWrapperBase.createReceiver(SessionWrapperBase.java:213)
    [08/Oct/2003:14:39:57] INFO ( 4936): CORE3282: stdout:      at com.jario.server.notification.NotificationServer.getNotifications(NotificationServer.java:152)

    I did notice that Admin tracking for PetStore demo fails with exceptions. In fact I had to restart the PetStore admin webapp just to get url to function again...still couldn't login in and track items via WebStart though.
    AdventureBuilder works fine too. Only error (noncritical?) was again at checkout.
    Most errors seem to be involving method 'findByPrimaryKey'.
    <[INFO][j2eesdk1.4_beta2][][][16][javax.enterprise.system.container.ejb][21.October.2003 17:40:54:723 PDT][
    javax.ejb.ObjectNotFoundException: Bean CounterEJB method findByPrimaryKey: cannot find bean with key 5432
    at com.sun.j2ee.blueprints.uidgen.counter.ejb.CounterEJB_217019936_ConcreteImpl.ejbFindByPrimaryKey(CounterEJB_217019936_ConcreteImp
    l.java:210)

  • JMS queue consumer challenge

    Hi there,
              I have met a pretty challenging problem in JMS queue consumer and
              would like to know if any JMS lovers in the group know about it.
              We have queue receiver listening on queue which contains a number of
              mugs.
              Once a msg is received (onMessage returns), the msg is handed over to
              a worker thread from a thread pool.
              Essentially there are two parts of the problem:
              1. We want kind of flow control - only x number of msg can be
              processed at a given time. This can be resolved by using semaphore.
              However, there might be better solution out there. Anyhow, this is
              less an issue than the second part -
              2. As we know client_acknowledge happens at the session level:
              Acknowledging a consumed message automatically acknowledges the
              receipt of all messages that have been consumed by its session. For
              example, if a message consumer consumes ten messages and then
              acknowledges the fifth message delivered, all ten messages are
              acknowledged. 
              -- this is the problem -- we want to acknowledge each msg
              individually so that only the processed msg is acknowledged although
              there are x number of msg being retrieved. By doing that we won't lost
              any msg in case the JMS client crashes.
              It is a challenge, isn't it? Might well not be one for you, if you
              know the trick. If you do, could you share with us? Thanks a lot.
              Mike
              

    Just to be clear, I favor (2), where each worker thread has its own session and
              consumer.
              This naturally throttles, as there are only as many outstanding messages as
              worker-threads.
              BTW, be aware that it is against spec, and dangerous, to call acknowledge()
              outside of
              onMessage() - as this multi-threads the Session and Session's are not thread
              safe.
              Tom
              Tom Barnes wrote:
              > Actually you both are correct. The ack behavior is configurable on the
              > connection factory via the "AcknowledgePolicy", where the default is
              > what the spec requires (ack-all). Prior to 6.1
              > the behavior was what one would expect (ack-before).
              >
              > As for how to solve the problem at hand. I can think of three approaches:
              >
              > (1) use the current async consumer but set the ack-policy
              > to ack-before, and defer acknowledging a msg until all msgs before
              > it have finished their processing
              >
              > (2) use multiple synchronous consumers, one consumer per defered msg
              >
              > (3) use a single synchronous consumer, but dequeue transactionally,
              > one transaction per msg. suspend the transaction, then have
              > the worker thread resume the transaction once it finishes processing
              > the message and call commit. (Take care that the default
              > tran timeout is 30 seconds.)
              >
              > Shean-Guang Chang wrote:
              >
              > > Just to correct one assumption. Ack the fifth message will not ack message
              > > received after that (e.g. message 6, 7, 8, etc...). At least not WLS JMS.
              > > If this is not true for you please give details of your client code and
              > > version of WLS JMS you have. Thanks!
              > >
              > > "Mike" <[email protected]> wrote in message
              > > news:[email protected]...
              > > > Hi there,
              > > >
              > > > I have met a pretty challenging problem in JMS queue consumer and
              > > > would like to know if any JMS lovers in the group know about it.
              > > >
              > > > We have queue receiver listening on queue which contains a number of
              > > > mugs.
              > > > Once a msg is received (onMessage returns), the msg is handed over to
              > > > a worker thread from a thread pool.
              > > >
              > > > Essentially there are two parts of the problem:
              > > >
              > > > 1. We want kind of flow control - only x number of msg can be
              > > > processed at a given time. This can be resolved by using semaphore.
              > > > However, there might be better solution out there. Anyhow, this is
              > > > less an issue than the second part -
              > > >
              > > > 2. As we know client_acknowledge happens at the session level:
              > > > Acknowledging a consumed message automatically acknowledges the
              > > > receipt of all messages that have been consumed by its session. For
              > > > example, if a message consumer consumes ten messages and then
              > > > acknowledges the fifth message delivered, all ten messages are
              > > > acknowledged.
              > > > -- this is the problem -- we want to acknowledge each msg
              > > > individually so that only the processed msg is acknowledged although
              > > > there are x number of msg being retrieved. By doing that we won't lost
              > > > any msg in case the JMS client crashes.
              > > >
              > > > It is a challenge, isn't it? Might well not be one for you, if you
              > > > know the trick. If you do, could you share with us? Thanks a lot.
              > > >
              > > > Mike
              

  • Queued Request Limit (Stateless) -

    I have stateless webservice calls setup and I am trying to trigger the Queued Request Limit (Stateless) limitation which is supported to be 5. However it seems that no matter how many concurrent sessions I kick off the calls simply queue up and do not trigger this exception. Does anyone have any insight on whether this limitation is not enforced?
    Some more information: all the calls are using the same CRMOD service account, but they spawn off 2 sessions on the server. I kicked of 20 concurrent sessions which are sharing these 2 on the server.
    Is it possible that this Queued Request Limit (Stateless) only kicks in if you are using different usernames?

    Hi jeffry;
    We have a "Feature Request" form where you can vote on popular existing ideas or add a new one of your own, limiting the responses is on the list for you to vote for:
    https://adobeformscentral.com/?f=XnF-KJVCovcEVQz9tZHYPQ
    We do not publish a road map of features at this point.
    Thanks,
    Josh

  • Message getting stuck in XBQO queue - Time limit exceeded

    Hi All,
    We have a BPM scenario in our project (on PI 7.0 SP18), where bundle of PEXR2002 Payment IDocs are received as a single flat file. This file is then consumed by the BPM, to split the message into multiple payments using Java Mapping.
    However, when we get an IDoc file of size greater than 5 MB (more than 500 IDocs), the message gets stuck in XBQO queue and eventually giving a SYSFAIL with the message "Time limit exceeded". Could you please let us know if you have encountered a similar issue and are aware of a possible solution.
    Any pointers to this will be really appreciated.
    Thanks & Regards,
    ROSIE SASIDHARAN

    H Rosie,
    1)  Goto SXMB_ADM-> Integration Engine Configuration->Parameter  EO_MSG_SIZE_LIMIT->possible values 0 - 2,097,151 (KB)
    The parameter EO_MSG_SIZE_LIMIT enables serial processing of messages of a particular size. This applies for messages with the quality of service Exactly Once (EO). If the message is larger than the parameter value, the message is processed in a separate queue.
    2)  Goto SXMB_ADM-> Integration Engine Configuration->Parameter  HTTP_TIMEOUT->possible values n Seconds, where n is a whole number.
    The parameter Specifies the timeout for HTTP connections (time between two data packages at line level). This value overrides the system profile parameter icm/server_port_n (for example, icm/server_port_0 : PROT=HTTP, PORT=50044, TIMEOUT=900). If you do not set the parameter HTTP_TIMEOUT or if you set the parameter to 0, then the setting for the system profile parameter is used.
      See SAP Note 335162  for sysfail issue....
      Hope these will help u....
    Regds,
    Pinangshuk.

  • Queue consumer stops with 100% cpu usage

    I'm trying to use Berkeley DB queue with transactions. When I tested what happens when transactions with DB_APPEND are aborted I found that while it works and DB_CONSUME correctly skips over rolled back records, unfortunately extents that have those records are never deleted, which causes database to always grow. Next I tried DB_CONSUME with database opened using DB_INORDER flag and it seems there's a serious regression in Berkeley DB that causes it to loop indefinitely with 100% cpu usage when it encounters a rolled back record. I tested various versions and found that this bug doesn't happen with 5.1.29, but it is reproducible with 5.2.42, so this regression might have been introduced in 5.2. I have also tested 5.3 and 6.0, and both have this behavior. There may be something wrong with the way queue records are rolled back, one indication of that would be that in 5.1.29 doesn't have neither of the two problems I found with DB_QUEUE: extents are deleted after being consumed, and there are no issues when consuming with DB_INORDER either.
    You can find Python code to reproduce this issue here:
    https://gist.github.com/snaury/027a3c546f5b0a62a440
    Sorry for using Python and not e.g. C++, but it's a lot shorter that way.

    We have looked at the issues and they are valid.   We will roll the fixes out for this in our next release of BDB.   The test case was very useful and really helped to speed the process up.    If you have any questions, please contact me directly at [email protected]  Thanks again for bringing this to our attention.
    thanks
    mike

  • Pending messages in queue consume cache and result slow processing

    Hi All
              I have one stand alone java application which is consumer of one weblogic JMS queue.
              What my application does, it take big messages in to xml format and convert it in to small chunk of xml using XSLT.
              Here I am struggling with one major problem when I sent 10 messages all together all messages went in to pending queue and as application process only one messages at a time, there for other messages waste the cache and processing become slow.
              If I send same 10 messages one by one after completion of last messages total time to process 10 messages is very less then compare to if I sent all together.
              Is there any web logic setting I can do so only one messages goes in to pending queue.

    Ali,
    How about this:
    142# imsimta qm dir | grep '^ *[0-9]' | wc -l
          14I don't know that it's significantly better, but "qm" generates only a single line of output per message whereas "cache" provides like 10/message.
    Bill

  • Queue consumer blocking producer!?!?

    This shouldn't be possible as far as I am aware, but somehow it seems that my consumer's receive call is preventing the producer from connecting to the queue and thus writing the message. Does anyone have any idea why this might be occurring?
    Running in a WAS 5.02 / MQSeries environment, I have a servlet that sends a message to a request queue and then waits to recieve the correlating message message on the response queue (using correlation id). Meanwhile, the request message is picked up by the MDB, processed, and a response message is generated by my session bean. However, the session bean is unable to establish a connection to the response queue and send the response if the web app is already waiting to recieve it (it will successfully post if no recieve call is made). Eventually the reciever will time out waiting for the response, and an exception is thrown by the producer indicating that the connection pool could not allocate a managed connection.
    As I understand, the reciever should only block its own thread of execution, and should not prevent a producer from writing to the queue. Is there some sort of configuration issue that might be causing this? Any possible insight into this problem would be greatly appreciated.
    thanks,
    zeffren

    brilliant!
    I couldn't for the life of me figure out what was going on because to my knowledge nothing in the code or our environement had changed. However, as it turned out, a team member had added some new MDB's which coincidentally had upped the number of connections to one less than the max available in the pool, therefore after my consumer established a recieve connection, there were none left for the producer!
    Thanks for outside perspective, sometimes thats all it takes ;)

  • URGENT PLEASE HELP: Broker only serving one queue consumer at a time

    Hello all,
    I have multiple consumers listening on a queue. The broker sends a message to the first listening consumer. This consumer receives that message and acknowledges it. and does some processing with it.
    All other consumers do not get any message from the broker. They are all listening on the queue for a long time. After i kill the first consumer one of the listening consumer gets a message.
    How can I configure the queue so that it sends multiple (different) messages to all the listening consumers with minimum delay?
    I am using a persistent queue and using 3.5 sp2 on windows.
    Thanks a lot in advance

    Sounds like your number of active consumers is set to 1 which is the default. Use imqcmd to set the maxNumActiveConsumers on your queue. The Platform Edition supports up to two active and one backup consumer. The Enterprise Edition does not have any limits.

  • ISE Alarm: Warning: Profiler Queue Size Limit Reached

    Anyone know what this error means and more importantly, is it anything to really be concerned about?  We started receiving this today for one of our PSNs and have been getting the alert every five minutes.  There hasn't been any 'known' impacts from this but it's very annoying and the Cisco documentation is a little vague.
    Thank you....

    Hmm, I am sorry but I will have to ask more questions:
    1. You mentioned that your PSNs are behind a load balancer, but are the nodes in a "node group?" If they are not you should place them in a node group. If they are you will need to split them as the max recommended nodes per node group is 10. 
    2. If the nodes are indeed in a node group are they all L2 adjacent?
    3. If your deployment consists of VMs and not physical appliances, can you confirm that both the adequate CPU/RAM are allocated and reserved for the VMs?
    Here are also some recommendations:
    1. If possible, move to IOS sensor on all of your switches and disable the probes that will no longer be needed. 
    2. If #1 is not possible check the configurations on your NADs and where Device Sensor is configured you should remove, IP Helper and SNMP Query based configs. This will prevent duplicate information from being sent to the PSNs
    3. Look to completely eliminate SNMP Traps based configurations for ISE. That probe along with Netflow and the Span probes are pretty heavy hitters
    4. Make sure that you are using Device Sensor on your WLCs as well
    5. Use the latest patch
    6. Get a support case going with Cisco and have them take a look :)
    For more info you should take a look at the following Cisco Live Sessions:
    BRKSEC-3697 and BRKSEC-3699
    Thank you for rating helpful posts!

  • Best way to configure redelivery limit value for a Queue

    Hello,
    My doubt is related to configuring the JMS Redelivery Limit property from Weblogic 9.2 Server.
    We must support redelivery attempts in our queue, with a redelivery delay of 30s. So, we have set the queue's Redelivery Limit property to -1, via Console Configuration:
    Settings for My_DQueue -> Delivery Failure -> Redelivery Limit = -1
    The consumer of that queue is a MDBBean, which extends org.springframework.ejb.support.AbstractJmsMessageDrivenBean.
    The producers to that queue are weblogic.jms.extensions.WLMessageProducer.
    That queue has an error queue configured as Error Destination.
    Then, the WLMessageProducer is the one who specifies that value:
    WLMessageProducer messageProducer = (WLMessageProducer)queueSession.createProducer(queue);
    messageProducer.setRedeliveryLimit(5);However, we will not be able to ensure that all message producers pointing that queue will specifiy that redelivery limit. This may lead us to problems, as default queue Redelivery Limit is set to -1, and messages without specified redelivery limit would be redelivered indefinitely.
    I'd like to know if there is any way to specify a MAXIMUM redelivery limit value for a JMS queue. For example: fixing that limit to 10. If producers specify by themselves a redelivery limit lower than such value, that limit is applied to messages. Otherwise, the configured default limit value is used.
    Another option we have considered is to include, in the MDB's onMessage() method, a validation of the "JMS_BEA_RedeliveryLimit" message property:
    This validation would check whether no redelivery limit is configured in the Producer, and would forward such messages directly to the error queue, from the MDB, when the "JMSXDeliveryCount" outnumbers our fixed value:
    public void onMessage(Message message) {
       try {
          if(message.getIntProperty("JMS_BEA_RedeliveryLimit")<0){
             //MESSAGE FOUND WITHOUT REDELIVERY LIMIT SPECIFIED BY PRODUCER.
             //POTENTIAL DANGER OF BEING REDELIVERED INDEFINETELY
             int deliveryCount = message.getIntProperty("JMSXDeliveryCount");
             if(deliveryCount>10){
                 //CAN I FORWARD MESSAGE TO ERROR DESTINATION?But we were not able to found such examples to achieve this
    Thanks in advance!
    Joan Esteve

    Hi Joan,
    I just double-checked, and as far as I can tell the options for setting a redelivery limit include programmatically on the Producer or by configuring an override on the Destination. Unfortunately, you need the override to only take effect if the delivery limit hasn't already been set. (If we had a default deliverylimit configurable on our connection factory, this would have done the trick.)
    I think you've already hit upon the solution: your consumers can check each received message's JMSXDeliveryCount and act accordingly. It's fine for a consumer to use the JMS_BEA_RedeliveryLimit property see if the Limit has been set by a producer, and then check JMSXDeliveryCount to check the delivery count, but I'm not sure if the JMS_BEA_RedeliveryLimit property is set in older versions (8.1 may not have it for example).
    As a refinement, you may want to use the WLMessageProducer forward() API. This is an alternative to send() that preserves the message-id and timestamp of a consumed message. I don't think forward() allows any modification of the consumed message before it's forwarded.
    Hope this helps,
    Tom
    Edited by: Tom B on Feb 22, 2013 10:03 AM

  • How to send message to a multi-consumer queue using pl/sql

    How to send message to a multi-consumer queue using pl/sql ? Thanks.
    I tried following, but got an message: no receipient specified.
    DBMS_AQ.ENQUEUE(
    queue_name => 'aqadm.multi_queue',
    enqueue_options => queue_options,
    message_properties => message_properties,
    payload => my_message,
    msgid => message_id);
    COMMIT;
    END;
    /

    Here's two way to enqueue/publish new message into multi-consumer queue.
    (1) Use explicitly declared recipient list
    - Specify "Recipients" by setting recipient_list to messge_properties, before ENQUEUE().
    DECLARE
    recipients DBMS_AQ.aq$_recipient_list_t;
    BEGIN
    recipients(1) := sys.aq$_agent('RECIPIENTNAME',NULL,NULL);
    message_properties.recipient_list := recipients ;
    (2)Or, declare subscriber list permanently. Then you need not to specify recipient list each time you call ENQUEUE().
    begin
    dbms_aqadm.add_subscriber(
    queue_name=>'YOURQUEUE',
    subscriber=> sys.aq$_agent('RECIPIENTNAME', null, null)
    end;
    You can add 1024 local subscriber include maximum 32 remote-queue-consumer to one queue.

  • Obtain Queue Data Type

    I am working my way through my first Producer Consumer vi and have two questions. 
    1. The data I am enqueuing is x,y,z acceleration samples of type Waveform. The snippet shows how I set the data type in Obtain Queue. It's rather ugly and disturbing even though it appears to work.  Is there a more elegant and beautiful way to set the data type?
    2. The sample rate of the accelerometer is 5120 Hz.  The DAQmx Read buffer is of lenght 1024 samples.  Hence, it takes 200 [ms] to fill the buffer.  I've set the metronome to 100 [ms] to ensure that the Producer doesn't miss any samples.  That means the Producer While Loop will spend a good portion of its time waiting.  Right?  Does having wait cost anything?
    In LabVIEW's ProducerConsumerExample.vi the sample rate is 10000.  The Read buffer size is 1000.  And the metronome is set to 100 [ms].  The sample rate of the device comes from the hardware device in the cDAQ.  The 100 [ms] interval comes from the PC.  Won't there be a mismatch?  I'd like to understand this before I set my metronome to 200 [ms].
    Solved!
    Go to Solution.

    Arizona_Joe wrote:
    So, can you shed some light on the behavior of the While Loop you mentioned that does not have a metronome and is is paced by DAQmx? I would think it would do a lot of spinning. 
    It isn't spinning because it is waiting inside of the DAQmx Read for N samples to be gathered.  That is not an instant data request.  It takes time to gather those samples.  That length of time is dependant on your sample rate and how many samples you are requesting.  So because it is waiting inside of the DAQmx Read, there is no need to add an additional wait.  Let the DAQmx Read limit the loop rate.
    It is actually just like the consumer loop for the Producer Consumer.  The reading of the queue will limit the rate at which that loop runs.  Therefore, it needs no wait.
    There are only two ways to tell somebody thanks: Kudos and Marked Solutions
    Unofficial Forum Rules and Guidelines

  • Handling of SOAP Faults in SOAP Clients consuming PI Web services

    Hi there,
    the following is in regards to SOAP fault error handling in a SOAP client that consumes a Web Service published by PI.
    I have been reading a number of threads and blogs in regards to this topic and I am still left with some open questions which I hope to get some final answersclarifications through this thread.
    In particular the blogs
    Handling Web Service SOAP Fault Responses in SAP NetWeaver XI      - Handling Web Service SOAP Fault Responses in SAP NetWeaver XI
    XI: Propagation of meaningful error information to SOAP Client     - XI: Propagation of meaningful error information to SOAP Client
    have caused by attention.
    Both of these threads are realating to the Fault Message type one can use to return errors back to a SOAP Client (.Net, Java, etc.).
    In our scenario we published a number of Web Services through PI that provide functionality to integrate with an R3 back-end system using inbound ABAP Proxies.
    The services are standardised and will be consumed by a number of .NetJava applications and systems. The reason for the use of ABAP proxies is the customer specific application logic that is executed in the backend system. The Web services are synchronous and don't use ccBPM in the middle. Transformations are performed in PI combined with various lookups to set default values before the message is passed into the ABAP Framework of the R3 back-end system. The lookups are done against the R3 back-end system using the PI RFC Lookup feature.
    The inbound proxies currently return application errors as part of the response message back to the SOAP client. For more critical errors we introduced the use of Fault message types as the method to return the information back to the SOAP Client. This is all working satisfactory.
    The questions I have are as follows.
    1. When an error occurs at the IE level (e.g. mapping error), ABAP Proxy framework level (e.g. conversion from XML to ABAP format) or Adapter Framework level (Adapter releated error) a different SOAP fault message structure is returned to the SOAP Client than the one    used for the application errors. The SOAP fault message structure used in this case is the standard SOAP fault used by PI to return system errors back to the caller. For those SOAP fault messages there is no payload generated that could be mapped to the SOAP fault structure used for the application errors. This would be preferrable as there would be only one Fault message structure used for both inbound ABAP proxy generated fault messages and PI generated fault messages.
    Also the error messages generated by PI can be quite cryptic and difficult to interpret at the client end and could be filtered     ranslated during message mapping if the payload of the PI generated SOAP fault message could be accessed in a message mapping.
    Point 3 of the above thread 2759 indicates that this would be possible but doesn't outline how. Could somebody please clarify this for me as I don't believe that this is really possible ???.
    My idea instead was to use the PI SOAP fault message structure to also return application errors. Therefore I would create a Fault message type that matches the PI SOAP fault structure. This would enable the SOAP Client to handle only one SOAP Fault error structure. Would that be something to look into instead ?????.
    2. We have been looking at using the integrated WEB AS SOAP adapter instead of using the AF Sender SOAP adapter. While playing with this we encountered differences in the content returned through the SOAP fault generated by PI. A sample is below. Shouldn't the content of these SOAP faults be the same if the error that caused it is the same. Also the SOAP fault returned by the IE SOAP adapter is much more    useful in this particular case. Both errors below are the same, a conversion error from XML to ABAP took place in the inbound ABAP proxy framework of the back-end system.
    SOAP fault returned when using SOAP Sender adapter of AF
    <!see the documentation>
    <SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP:Body>
          <SOAP:Fault>
             <faultcode>SOAP:Server</faultcode>
             <faultstring>Server Error</faultstring>
             <detail>
                <s:SystemError xmlns:s="http://sap.com/xi/WebService/xi2.0">
                   <context>XIAdapter</context>
                   <code>ADAPTER.JAVA_EXCEPTION</code>
                   <text>com.sap.aii.af.ra.ms.api.DeliveryException: XIProxy:PARSE_APPLICATION_DATA:
         at com.sap.aii.adapter.xi.ms.XIEventHandler.onTransmit(XIEventHandler.java:455)
         at com.sap.aii.af.ra.ms.impl.core.queue.consumer.CallConsumer.onMessage(CallConsumer.java:134)
         at com.sap.aii.af.ra.ms.impl.core.queue.Queue.run(Queue.java:916)
         at com.sap.aii.af.ra.ms.runtime.MSWorkWrapper.run(MSWorkWrapper.java:56)
         at com.sap.engine.core.thread.impl3.ActionObject.run(ActionObject.java:37)
         at java.security.AccessController.doPrivileged(Native Method)
         at com.sap.engine.core.thread.impl3.SingleThread.execute(SingleThread.java:102)
         at com.sap.engine.core.thread.impl3.SingleThread.run(SingleThread.java:172)</text>
                </s:SystemError>
             </detail>
          </SOAP:Fault>
       </SOAP:Body>
    </SOAP:Envelope>
    SOAP fault using integrated SOAP adapter of PI IE
    <SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">
       <SOAP:Body>
          <SOAP:Fault>
             <faultcode>SOAP:Server</faultcode>
             <faultstring>System Error</faultstring>
             <detail>
                <s:SystemError xmlns:s="http://sap.com/xi/WebService/xi2.0">
                   <context/>
                   <code>ABAP.PARSE_APPLICATION_DATA</code>
                   <text>Error during XML => ABAP conversion (Request Message; error ID: CX_ST_DESERIALIZATION_ERROR; (/1SAI/TXSBE20FF604BAFEF8D990A XML Bytepos.: 564  XML Path: ns1:CreatePORequest(1)POHEADER(2)COMP_CODE(1) Error Text: Data loss occurred when converting ############################## Kernel ErrorId: CONVT_DATA_LOSS))</text>
                </s:SystemError>
             </detail>
          </SOAP:Fault>
       </SOAP:Body>
    </SOAP:Envelope>
    I have been reading threads for hours without being able to find one that answers questions 1 or provides a blog that outlines the approach one should take for error handling in SOAP clients that consume PI Web Services (and covers both PISystem generated faults and faults raised in Proxies).
    There may already be a blog or thread and I just missed it.
    Any comments are welcome.
    Thanks. Dieter

    Hi Dieter,
    As Bhavesh already mentioned fault messages are used for application errors. The same is described in SAP XI help:
    http://help.sap.com/saphelp_nw04/helpdata/en/dd/b7623c6369f454e10000000a114084/frameset.htm
    In case of system error (e.g. field length too long in proxy call or error in XI/PI mapping) there seems to be no standard way of handling it and propagating the response to the consumer of webservice.
    Each system error is not recognized by SOAP adapter and SOAP adapter exception is raised.
    The only bizzare solution that I can see is developing an adapter module and transport wrong message to standard fault message before delivering it to adapter engine:
    http://help.sap.com/saphelp_nw04/helpdata/en/a4/f13341771b4c0de10000000a1550b0/frameset.htm
    Kind regards,
    Wojciech
    btw nice thread

Maybe you are looking for

  • My html code is only working on the 1st tab panel (muse widget)

    I have some html code with javascript which calculates total marks. I inserted this in the first tab and my code works fine, but when i insert it in the second, third and so on it stops working completely(including the 1st tab). Is there something i

  • How to move songs from ipod to itunes library?

    i recently rebooted my laptop and saved my current itunes library to my hard drive. i installed itunes after the reboot bu cannot get my old library back into itunes. is there also a way of sending the songs from my ipod to itunes?

  • Effectivity in ECR/ECO

    Can some one help me to resolve my query? We are having ECR system developed for existing system and we have not utilized all the provided features of SAP 4.6C Now we are going for SAP ECC6.0 where-in we ant to use effectivity parameter for controlli

  • Create a value for Decision table with gc_option_not_initial.

    Dear Expert, I am filling in a decision table with coding. I load an excel file, create a range for eatch value with the folling method:    cl_fdt_convenience=>create_simple_range( EXPORTING iv_application_id = lv_application_id                      

  • F4 in the table entries

    Hi Experts               when i see the tables using N transactions some of the fields are having the F4 enties, but when i see in the SE11 whether any search help applied for that fields, nothing applied.         Then how its showing the F4, how to