Scaling JMS Servers

I have a requirement to scale very large volumes of JMS messages (300+ million messages per day). I am concerned that the JMS server will become a bottleneck in the cluster. Is it possible to add additional JMS servers and use distributed destinations to load balance JMS traffic and maintain transparency to the JMS consumers/producers?

Yes, distributed destinations are transparent. They appear as a single logical destination to the application. For messaging applications, other major items may also impact performance/scalability. Working on these sometimes reduces the need for distributed destinations (tuning, batching, WL version, etc.)
          Tom

Similar Messages

  • WebLogic 12.1.2 erases subdeployment on Distributed Queue when targeted to multiple JMS Servers

    Update: verified in a 12.1.1.0 (JDK6) cluster - bug does not occur there.
    Hi,
      I have been migrating an 10.3.5.0 server to WebLogic 12.1.2.0 and have been unable to keep the subdeployment dropdown populated in the subdeployment tab of a uniform distributed queue when the subdeployment targets more than 1 JMS Server.
      If I uncheck one of the servers - I work fine - however I would like to target all JMS Servers in the cluster - this used to work fine in 10.3.5.0
      Following
    http://docs.oracle.com/cd/E24329_01/apirefs.1211/e24401/taskhelp/jms_modules/distributed_queues/CreateUniformDistributedQueues.html
      I am able to create a new queue no problem against the multiple-server subdeployment - but when I navigate to the subdeployment dropdown - the target is erased with "None".
    If I save the subdeployment after setting it during the queue create - it is erased
    <sub-deployment-name>MW-JMS-SubDeployment</sub-deployment-name>
    Before:
    <weblogic-jms xmlns="http://xmlns.oracle.com/weblogic/weblogic-jms" xmlns:sec="http://xmlns.oracle.com/weblogic/security" xmlns:wls="http://xmlns.oracle.com/weblogic/security/wls" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-jms http://xmlns.oracle.com/weblogic/weblogic-jms/1.1/weblogic-jms.xsd">
      <uniform-distributed-queue name="HousekeeperControlQueue">
        <sub-deployment-name>MW-JMS-SubDeployment</sub-deployment-name>
        <jndi-name>jms/HousekeeperControlQueue</jndi-name>
      </uniform-distributed-queue>
    </weblogic-jms>
    After:
    <weblogic-jms xmlns="http://xmlns.oracle.com/weblogic/weblogic-jms" xmlns:sec="http://xmlns.oracle.com/weblogic/security" xmlns:wls="http://xmlns.oracle.com/weblogic/security/wls" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-jms http://xmlns.oracle.com/weblogic/weblogic-jms/1.1/weblogic-jms.xsd">
      <uniform-distributed-queue name="HousekeeperControlQueue">
        <jndi-name>jms/HousekeeperControlQueue</jndi-name>
      </uniform-distributed-queue>
    </weblogic-jms>
    Workaround:
    - upon server startup the config is valid - just dont re-save the jms module or the subdeployment target will be erases
    - also when creating a new subdeployment you will be able to select it from a jms distributed queue in the advanced targeting section even if it contains expected multiple JMS servers
    - you will not however be able to edit the JMS queue once created - if there is any change to targeting - recreating the queue is required
      thank you
      /michael

    Update: verified in a 12.1.1.0 (JDK6) cluster - bug does not occur there.
    Hi,
      I have been migrating an 10.3.5.0 server to WebLogic 12.1.2.0 and have been unable to keep the subdeployment dropdown populated in the subdeployment tab of a uniform distributed queue when the subdeployment targets more than 1 JMS Server.
      If I uncheck one of the servers - I work fine - however I would like to target all JMS Servers in the cluster - this used to work fine in 10.3.5.0
      Following
    http://docs.oracle.com/cd/E24329_01/apirefs.1211/e24401/taskhelp/jms_modules/distributed_queues/CreateUniformDistributedQueues.html
      I am able to create a new queue no problem against the multiple-server subdeployment - but when I navigate to the subdeployment dropdown - the target is erased with "None".
    If I save the subdeployment after setting it during the queue create - it is erased
    <sub-deployment-name>MW-JMS-SubDeployment</sub-deployment-name>
    Before:
    <weblogic-jms xmlns="http://xmlns.oracle.com/weblogic/weblogic-jms" xmlns:sec="http://xmlns.oracle.com/weblogic/security" xmlns:wls="http://xmlns.oracle.com/weblogic/security/wls" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-jms http://xmlns.oracle.com/weblogic/weblogic-jms/1.1/weblogic-jms.xsd">
      <uniform-distributed-queue name="HousekeeperControlQueue">
        <sub-deployment-name>MW-JMS-SubDeployment</sub-deployment-name>
        <jndi-name>jms/HousekeeperControlQueue</jndi-name>
      </uniform-distributed-queue>
    </weblogic-jms>
    After:
    <weblogic-jms xmlns="http://xmlns.oracle.com/weblogic/weblogic-jms" xmlns:sec="http://xmlns.oracle.com/weblogic/security" xmlns:wls="http://xmlns.oracle.com/weblogic/security/wls" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-jms http://xmlns.oracle.com/weblogic/weblogic-jms/1.1/weblogic-jms.xsd">
      <uniform-distributed-queue name="HousekeeperControlQueue">
        <jndi-name>jms/HousekeeperControlQueue</jndi-name>
      </uniform-distributed-queue>
    </weblogic-jms>
    Workaround:
    - upon server startup the config is valid - just dont re-save the jms module or the subdeployment target will be erases
    - also when creating a new subdeployment you will be able to select it from a jms distributed queue in the advanced targeting section even if it contains expected multiple JMS servers
    - you will not however be able to edit the JMS queue once created - if there is any change to targeting - recreating the queue is required
      thank you
      /michael

  • How do you span a jta usertransaction across multiple jms servers?

    I have an ejb that connects to multiple jms servers (non-clustered) and
              retrieves messages. Those messages are concatenated together and placed on
              another jms queue. Is it possible to do all of this inside of one
              transaction? I am having trouble pulling this off.
              

    Sure, you can do this. Assuming you're using WLS JMS, you have to make sure that for all the JMS servers you're talking to, you use a connection factory with the "XA Connection Factory Enabled" flag set. You also need to make sure that you use JTA to start a transaction before retrieving the first message, and commit it after you're done with the final send.

  • API to list Uniform Distributed Queue JMS Servers

    Hi all,
    I posted this in the SOA suite forum but this one may be better.
    I am writing a POJO webservice to synchronously read a message from a JMS queue. Unfortunately the queue is actually a uniform distributed queue so I actually need to look for messages in each of the local queues.
    I have written code to find the JNDI names of the local queues as follows:
    StringArray DistribMemberNames = new StringArray();
    String ttt;
    ttt = JMSHelper.uddMemberJNDIName("IMPJMSServer_1", part1.getJNDIName());
    DistribMemberNames.add(ttt);
    ttt = JMSHelper.uddMemberJNDIName("IMPJMSServer_2", part1.getJNDIName());
    DistribMemberNames.add(ttt);
    This works fine but I have hard coded the names of the JMS Servers and this is bad practice. I need to find a method where I can take the JNDI name of the uniform distributed queue and find all the JMSServer names. I have been looking for days but I can’t find anywhere in the API documentation that describes this.
    Does anyone have any suggestions?
    Thanks
    Robert
    (I am using 11.1.1.5 on a clustered weblogic enviroment)

    Hi,
    I have managed to answer this question myself.
    I needed to create a context:
    Hashtable env = new Hashtable();
    env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
    m_jndiContext = new InitialContext(env);
    Look up the main runtime mbean
    MBeanServer server;
    server = (MBeanServer) m_jndiContext.lookup("java:comp/env/jmx/runtime");
    Navigate down the domain configuration to get the JMSServers
    ObjectName service = null;
    ObjectName domainConfiguration = null;
    ObjectName[] jmsServers = null;
    service = new ObjectName(
    "com.bea:Name=RuntimeService,"
    + "Type=weblogic.management.mbeanservers.runtime.RuntimeServiceMBean");
    domainConfiguration = (ObjectName) server.getAttribute(service, "DomainConfiguration");
    jmsServers = (ObjectName[]) server.getAttribute(domainConfiguration, "JMSServers");
    For each server you can retrive it's name:
    for (int i = 0; i < length_serverRT; i++) {
    String jmsServerName = "";
    jmsServerName = (String) server.getAttribute(serverRT, "Name");
    I had to do some additional filtering for my own requirements
    Robert

  • Can BEA JMS C APIs be used to communicate with other JMS servers?

    Hello,
              Can BEA JMS C APIs be used to communicate with other JMS servers?
              If yes, is it enough to download, compile the JMS C APIs, and link the C applications to the libraries (shared or static) produced?
              If not, can you point me to an open source framework that can be used to enable C applications to communicate with JMS servers?
              I have HP-UX server that has both C and Java compilers (Java 1.5).

    The JMS C client is a pre-compiled library - we don't supply the source - so C applications link to it. If I recall correctly, there is an HP version. The C client library is actually thin layer that uses JNI to directly invoke a Java JMS client running in an embedded JVM.
              The library might work with other vendor's Java JMS clients, but BEA does not officially support this usage.
              Tom

  • Paging in JMS servers

    hi
              I am working on WLS 8.1. I developed a script using weblogic.admin to get the information about all the JMS servers in a cluster. It was working fine. But now as I configured paging and distributed queues to my JMS servers, that script is only getting the information of the JMS servers which dont have these added features with the same. I appreciate if somebody can tell me the reason those servers are not active.
              thanks in advance

    Hi,
              It sounds like you may have a generic mbean problem and not something unique to JMS. The "management" newsgroup may be able to help if you post more info there.
              Meanwhile, in case you're unaware, there's a simple JMS stat dump sample program for 8.1 called "JMSStats.java" available on dev2dev. Search code-share for jmstats, or one of these links might work:
              https://codesamples.projects.dev2dev.bea.com/servlets/ScarabDownload/resultpos/-1/nbrresults/0/remcurreport/true/template/ViewAttachment.vm/attachid/311/filename/JMSStats.zip
              https://codesamples.projects.dev2dev.bea.com/servlets/Scarab/remcurreport/true/template/ViewIssue.vm/id/S52/eventsubmit_dosetissueview/foo/resultpos/-1/nbrresults/0/action/ViewIssue/tab/4/readonly/false
              Tom

  • Connecting JMS servers together into a cluster

              Hi
              I am just wondering if anyone tried (or is it even possible) to connect JMS servers
              from different providers (say BEA and Sonic) together in a cluster of some sorts?
              Thanks
              

    Integrating foreign vendors with WL has come up many times in this newsgroup.
              Search for "MQ" (MQSeries) and "Sonic".
              Tom
              Alex wrote:
              > Hi
              >
              > I am just wondering if anyone tried (or is it even possible) to connect JMS servers
              > from different providers (say BEA and Sonic) together in a cluster of some sorts?
              >
              > Thanks
              

  • JMX script for monitoring JMS servers in a cluster

    hi
    I am new to writing scripts. I will appreciate if I can get some help in writing a JMX script for monitoring JMS Servers in a cluster a well as monitoring the distributed queues
    thanks

    Exact scenario is,
              JMS Server
              |
              DistributedQueue
              | |
              JMSrvr1 JMSrvr2
              Q1 Q3
              Q2 Q4
              Q1 and Q2 delegateing messages, and at the same time Q3,Q4 also delegating messages.
              If JMSrvr1 down, we need to merge Q1 and Q2 with JMSrvr2. Here we cannot migrate as, JMSrvr already have queues. We need to merge all these queues.
              Thanks and Regards,
              Narayana Moorthy.

  • Weblogic Service Migration - JMS Servers and JTA

    We are having 2 node managed server Custer - active- active configuration. We are planning to use Weblogic Service Migration to migrate JMS servers and JTA in case of Failure to the available node in the cluster.
    ===> There is a problem in node1; Due to the failure of node1, JMS servers and JTA do get migrated to Node2.
    ===> Problem in node 1 is resolved and is available.
    ===> How to revert the migrated JMS servers and JTA back to node 1?
    Thanks

    If I have a 2-node cluster, that means I have to take an outage ? There is no elegant solution to this ?
    Thank you !

  • Free jms servers that can run on windows 95

    hi,
    Are there any free jms servers out there that I can install on windows95? most of them seem to be for NT, LINUX, XP etc....
    I need to run a few examples that I have downloaded at home on my very old crappy os so that I can get myself familiarised with JMS.
    Many thanks

    Most JMS servers are going to be able to run on Windows 95--most are written in Java. If you are looking for a free one see JBoss.org

  • JMS Servers

              I wonder if someone could clear this up for me, JMS support the following architecture
              JMS Clients (Which can be either a JMS Producer or a JMS Consumer)
              JMS Provider (which provides the destinations for JMS Clients to send/recieve
              messages)
              In the case of WLS 7.0 is the actual JMS Server the JMS Provider?
              regards
              Barry
              

    In WebLogic:
              JMS destinations are hosted on a JMS server (as I wrote below)
              A WL server may host zero or more JMS servers (as I wrote below)
              A WL cluster may host one or more WL servers, where all
              share a replicated JNDI context
              JMS client connections are hosted on a WL server within
              the same WL cluster as their JMS server,
              where the connection host is determined
              round-robin style according to the configured
              targets for the connection factory they are using.
              As per the JMS API, JMS clients access destinations
              via resources obtained from their JMS connection
              (resources include consumers and producers),
              the JMS connection routes all client requests
              to these resources through
              its WL server host to the JMS server
              which hosts the destination (which may
              be on another WL server within the cluster)
              You will find this information in the JMS Programmer's Guide,
              as well as most books that cover WL JMS, as well as
              the "JMS Performance Guide" white-paper.
              Tom
              Barry Myles wrote:
              > What then is a JMS Provider? and how does it map to the architecture and components
              > found in a WLS?!?!?!?!
              >
              > I know how JMS Consumers and Producers fit into this but am still in the dark
              > as to what component provides the actual JMS service? I thought that by connecting
              > to a JMS Server and starting a JMS session you were in-effect being provided with
              > a JMS service by the server?
              >
              >
              > Tom Barnes <[email protected].bea.com>
              > wrote:
              >
              >>WL JMS clients can run stand-alone or on a WL server. That
              >>WL server can host zero or more JMS servers.
              >>
              >>JMS Provider is a loose term. It might be most clear
              >>to say that the WL cluster is the JMS "destination" provider,
              >>and that WL JMS destinations are hosted on one or more
              >>JMS servers within that cluster. I put it this way
              >>because destination's are location transparent
              >>within the WL cluster JNDI context, so a client need only
              >>locate any server within the cluster to communicate with
              >>a destination, and doesn't ever know the actual physical server
              >>within the cluster that hosts the destination.
              >>
              >>Barry Myles wrote:
              >>
              >>>I wonder if someone could clear this up for me, JMS support the following
              >>
              >>architecture
              >>
              >>>
              >>>JMS Clients (Which can be either a JMS Producer or a JMS Consumer)
              >>>
              >>>JMS Provider (which provides the destinations for JMS Clients to send/recieve
              >>>messages)
              >>>
              >>>In the case of WLS 7.0 is the actual JMS Server the JMS Provider?
              >>>
              >>>regards
              >>>Barry
              >>
              >
              

  • JMS Servers - no "Clusters" tab ??

              Setting up a cluster with WL6.1; I'm adding a second app server
              machine to an existing app svr box + db box (the non-clustered environment has worked
              just fine).
              Everything seems pretty straightforward, except for JMS Servers.
              Under "Targets", there is no "Clusters" tab, even though the Help
              "Assign a JMS Server" section refers to the "Clusters" tab. All
              I have is a "Servers" tab that lists the two servers I created,
              plus "myserver." Do I need to clone each JMS Server, then assign each one to a specific
              Server?
              Thanks for any assistance!
              

              JMS server cannot be assigned to cluster. You have to create a JMS server for each
              individual weblogic server.
              "Eric Doherty" <[email protected]> wrote:
              >
              >Setting up a cluster with WL6.1; I'm adding a second app server
              >machine to an existing app svr box + db box (the non-clustered environment
              >has worked
              >just fine).
              >
              >Everything seems pretty straightforward, except for JMS Servers.
              >Under "Targets", there is no "Clusters" tab, even though the Help
              >"Assign a JMS Server" section refers to the "Clusters" tab. All
              >I have is a "Servers" tab that lists the two servers I created,
              >plus "myserver." Do I need to clone each JMS Server, then assign each one
              >to a specific
              >Server?
              >
              >Thanks for any assistance!
              

  • Two JMS Servers on two different nodes in cluster potinting to same destination.

    Here is my JMS configuration:
              <JMSServer Name="transQueueJMSServer_Node1"
              Store="transQueueStore_Node1" Targets="WebServices_Node1">
              <JMSTopic JNDIName="jms.topic.transQueueTopic"
              Name="transQueueTopic" RedeliveryLimit="0"/>
              </JMSServer>
              <JMSServer Name="transQueueJMSServer_Node2"
              Store="transQueueStore_Node2" Targets="WebServices_Node2">
              <JMSTopic JNDIName="jms.topic.transQueueTopic"
              Name="transQueueTopic" RedeliveryLimit="0"/>
              </JMSServer>
              Is it okay to have above configuration? I do not see any problem in my
              testing. But on the startup, second node throws the
              following error message.
              +++++++++++ <Nov 2, 2002 4:03:10 PM PST> <Error> <Cluster> <Conflict
              start: You tried to bin
              +++++++++++ d an object under the name jms.topic.transQueueTopic in the
              JNDI tree. The objec
              +++++++++++ t you have bound from dev_app is non clusterable and you have
              tried to bind mor
              +++++++++++ e than once from two or more servers. Such objects can only
              deployed from one se
              +++++++++++ rver.>
              And the version of the weblogic I am using is Weblogic6.1 SP3. The whole
              point of this configuration is to load balance the nodes.
              I have a MDB deployed on both the nodes listening to queue
              <<jms.topic.transQueueTopic>>.
              Can you guys suggest any alternative options?
              Many Thanks.
              

    Hi,
              There is a configurable on the destination to prevent the destination's
              JNDI name from being bound into cluster-wide JNDI, named something
              like "JNDIReplicationEnabled". The configurable is available
              as a patch on top of SP3. I don't have time to look up the patch
              number, but I know it is mentioned in the JMS performance
              white-paper (available on dev2dev.bea.com) in the
              "emulating distributed destinations" section.
              Tom, BEA
              bkondalreddy wrote:
              > Here is my JMS configuration:
              > <JMSServer Name="transQueueJMSServer_Node1"
              > Store="transQueueStore_Node1" Targets="WebServices_Node1">
              > <JMSTopic JNDIName="jms.topic.transQueueTopic"
              > Name="transQueueTopic" RedeliveryLimit="0"/>
              > </JMSServer>
              > <JMSServer Name="transQueueJMSServer_Node2"
              > Store="transQueueStore_Node2" Targets="WebServices_Node2">
              > <JMSTopic JNDIName="jms.topic.transQueueTopic"
              > Name="transQueueTopic" RedeliveryLimit="0"/>
              > </JMSServer>
              >
              >
              > Is it okay to have above configuration? I do not see any problem in my
              > testing. But on the startup, second node throws the
              > following error message.
              >
              > +++++++++++ <Nov 2, 2002 4:03:10 PM PST> <Error> <Cluster> <Conflict
              > start: You tried to bin
              > +++++++++++ d an object under the name jms.topic.transQueueTopic in the
              > JNDI tree. The objec
              > +++++++++++ t you have bound from dev_app is non clusterable and you have
              > tried to bind mor
              > +++++++++++ e than once from two or more servers. Such objects can only
              > deployed from one se
              > +++++++++++ rver.>
              >
              > And the version of the weblogic I am using is Weblogic6.1 SP3. The whole
              > point of this configuration is to load balance the nodes.
              > I have a MDB deployed on both the nodes listening to queue
              > <<jms.topic.transQueueTopic>>.
              > Can you guys suggest any alternative options?
              >
              > Many Thanks.
              >
              >
              

  • JMS servers' data failover

    hi,
    In a cluster with two managed servers (SRV1,SRV2) each one running its own JMS server and distributed queues when one server goes down while some producer still sends messages in a normal circumstances the producer will be reconnected to another server and remaining messages will go to this server. My question is if before crash there are 50 pending messages on affected server shouldn't they be transfered to running server (after the crash) so the client could read them before crashed server goes online again? All servers use some shared drive for their persistance store. Or this data migration have to be done manually along with JMS service migration?
    all i could find in documentation that there is automatic jms producers failover but there is no information what happens with data in persistance store, how to make them available for the client connected to another server running the same distributed queue.

    I believe you need to either start the server in-place or fail-it-over using something like whole-server-migration or service-level migration to recover those messages. There is no automatic mechanism to make them magically move from the persistent store of failed server to a server that is already running.
    http://edocs.bea.com/wls/docs100/cluster/migration.html#wp1039659

  • Clustered JMS Servers

              I'm having problems with binding the JNDI tree for the other than the first server
              started in the cluster.
              The error looks like this.
              <2001-aug-22 14:31:41 GMT+02:00> <Error> <Cluster> <Conflict start: You tried
              to bind an object under the name EngineRegTopic in the jndi tree. The object you
              have bound weblogic.jms.common.DestinationImpl from 172.18.61.17 is non clusterable
              and you have tried to bind more than once from two or more servers. Such objects
              can only deployed from one server.>
              How come?
              / Martin
              

    I am afraid JMS is not clusterable in WL6.0. Maybe you could try 6.1.
              "Martin" <[email protected]> ¼¶¼g©ó¶l¥ó
              news:3b83ad87$[email protected]..
              >
              > I'm having problems with binding the JNDI tree for the other than the
              first server
              > started in the cluster.
              > The error looks like this.
              > <2001-aug-22 14:31:41 GMT+02:00> <Error> <Cluster> <Conflict start: You
              tried
              > to bind an object under the name EngineRegTopic in the jndi tree. The
              object you
              > have bound weblogic.jms.common.DestinationImpl from 172.18.61.17 is non
              clusterable
              > and you have tried to bind more than once from two or more servers. Such
              objects
              > can only deployed from one server.>
              > How come?
              > / Martin
              

Maybe you are looking for