7 Replies Latest reply on Mar 29, 2010 12:36 PM by nnanda

    HornetQ in Standalone Mode or not?

    nnanda

      Hi All,

       

      We are going to consider HornetQ for our messaging solution. We are using JBoss 5.1 app server and our project is basically a web service based one. JMS will be used mainly for logging process (i.e. some request/response data will be logged into a DB asynchronously) and sending emails. We will be using EJB3 MDBs for our purpose. I have few questions:

       

      - The max hit to our application will be 2 million a day

      - The data that we want to be logged contains several informations and hence passed as Object Messages.

      - Security is not a big concern because the JMS will be deployed inside company's firewall.

      - We must not loose any data which is sent over JMS.

      - We will NOT be running any clusters(neither for JBoss AS nor for HornetQ).

       

      With these considerations, how should we use HornetQ? - in standalone mode or within JBoss AS?

       

      For us, performance is a big concern. Please suggest on this.

       

      Thanks,

      Niranjan

        • 1. Re: HornetQ in Standalone Mode or not?
          bjchip

          Consider half-and-half ?

           

          Live server inside JBoss -  standalone for the backup. 

           

          respectfully

          BJ

          • 2. Re: HornetQ in Standalone Mode or not?
            clebert.suconic

            Performance wise there isn't much difference between HornetQ standalone or inside JBoss.

             

            The only difference here is if it would make sense to keep it in separate VMs or not. (You will be inside the same VM as JBoss, sharing GC and other concurrent factors). I would need to know more of your application for that.

             

             

            You were also saying MDBs. Keep in mind that MDBs will require a transactional context for each message you process on the MDB. If you were processing your messages outside of an MDB, you could get a much higher throuput by not using MDBs.

            • 3. Re: HornetQ in Standalone Mode or not?
              nnanda

              Hi,

               

              Thank you for the reply. I want to understand few more points.


              1. Can standalone HornetQ take this kind of load?

               

              As far as my application goes, HornetQ will be running inside a separate VM; completely outside of my application. It will be like following.

               

              VM 1: WAR file containing my web service application (one set of ports). For all queue messages, get the queue reference through a remove JNDI call and put the message in the queue.

               

              VM2: HornetQ (either standalone or inside JBoss) on a separate set of ports.

               

              • Both VMs will reside under same physical box running 1GB of Heap space bound to two different private IPs.
              • The operations are not transactional in nature.

               

              Please let me know if you see any issue with this deployment structure/design.

               

              Second point that I want to understand is regarding MDB. As far as I understand, processing messages from a JMS queue can be done by a message listener and that can be a MDB. Am I wrong? Is there any other way to read messages from a JMS queue? Please provide some references and examples if possible.

               

              Thanks,

              Niranjan

              • 4. Re: HornetQ in Standalone Mode or not?
                timfox

                Clebert Suconic wrote:

                 


                You were also saying MDBs. Keep in mind that MDBs will require a transactional context for each message you process on the MDB.

                That's only true if the MDB is marked as transacted.

                • 5. Re: HornetQ in Standalone Mode or not?
                  timfox

                  NIranjan Nanda wrote:

                   

                  Hi,

                   

                  Thank you for the reply. I want to understand few more points.


                  1. Can standalone HornetQ take this kind of load?

                   

                  As far as my application goes, HornetQ will be running inside a separate VM; completely outside of my application. It will be like following.

                   

                  VM 1: WAR file containing my web service application (one set of ports). For all queue messages, get the queue reference through a remove JNDI call and put the message in the queue.

                   

                  VM2: HornetQ (either standalone or inside JBoss) on a separate set of ports.

                   

                  • Both VMs will reside under same physical box running 1GB of Heap space bound to two different private IPs.
                  • The operations are not transactional in nature.

                   

                  Please let me know if you see any issue with this deployment structure/design.

                   

                  Second point that I want to understand is regarding MDB. As far as I understand, processing messages from a JMS queue can be done by a message listener and that can be a MDB. Am I wrong? Is there any other way to read messages from a JMS queue? Please provide some references and examples if possible.

                   

                  Thanks,

                  Niranjan

                  MDBs are not part of the JMS specification, they are part of the JEE specification. JMS knows nothing about MDBs.

                   

                  If you want to know how to read a message from a JMS queue without using MDBs I suggest the following link:

                   

                  http://java.sun.com/products/jms/tutorial/1_3_1-fcs/doc/copyright.html

                  • 6. Re: HornetQ in Standalone Mode or not?
                    timfox

                    Regarding performance - you say the operations are non transactional, for non transactional auto ack, HornetQ (next release) can support a throughput of around 800K small messages *per second* on some pretty standard IBM 4 core servers, so 2 million messages per day is not a lot.

                     

                    So, the overhead from HornetQ will be small, the real question is how many CPU cycles is burnt in sending/processing messages and the rest of your app. That I cannot answer.

                    • 7. Re: HornetQ in Standalone Mode or not?
                      nnanda

                      Tim,

                       

                      Thank you for clarifying my points.

                       

                      What I understand from the Sun Micro tutorial is: we can read JMS messages by queue receievers, but MDBs provide an automatic way to consume queued messages. For us since we have decided to use MDBs, I think we need full JBoss app server. So, we can deploy both HornetQ and MDBs in a separate instance and the message producers will put the message in that remote queue.

                       

                      "Bottom line: we have to go with NON-standalone mode"

                       

                      You are mentioning 800K small messages. What is the notion of Small Messages here? Are you saying only Text Messages? Or small Object Messages. Our messages are not small. And those will be Object Messages (not Text  Messages). But in any case, we will be using JBoss AS and hence, will use a JMS solution from the same house. We have initially planned to use JBoss Messaging (the default for JBoss 5.1 AS). However, seeing JBoss's stance towards HornetQ, we are redeciding.

                       

                      By the way when is your next version coming out and which version you are mentioning (2.1 or 2.2)? Your roadmap shows both these versions.

                       

                      Our project will go live in May 22. Does any of your versions will see sunlight within this time frame? In that case we can go ahead with with 2.0 now and can upgrade to the latest version. I don't think there will be any upgradation issue.

                       

                      Please help me clarify these points.

                       

                      Thanks,

                      Niranjan