This week's book giveaway is in the OCMJEA forum. We're giving away four copies of OCM Java EE 6 Enterprise Architect Exam Guide and have Paul Allen & Joseph Bambara on-line! See this thread for details.
Running Weblogic 10.0 servers in a clustered environment, is there a way to create a uniform deployment where the MDB on each server instance in the cluster could use a message selector that only picked up messages from a shared queue that are destined for that specific server instance?
It's a weird case, 99% of the messages can be picked up by any server in the cluster, but 1% of them need to be processed by a specific instance. I would like to have one MDB read blindly, and if it receives a message marked for a specific instance, it would place it into a different queue where a second MDB could pick it up based on message selector.
This keeps my performance up on the 99% of the cases and puts the penalty on the 1%. This use case is a request-response pair of messages. Most the time the server is stateless and any instance can correlate the response, but in 1% of the cases, a specific server instance is expecting the response to be applied to an object it is holding in a memory cache to make the asynchronous service call look like a synchronous call to the service client.
you can solve this problem in a diff manner, the messages which you want to be picked up by one server instance could be posted on a different queue and only the specific server should listen to that queue.
1) different deployment per server instance in the cluster 2) a need to know anything about the other deployed server instances. 3) proliferation of queues
To solve #1 the server would need to use a message selector or locate a queue based on something from it's environment. The deployed artifact (ear file) should be deployed to the entire cluster.
To solve #2 the message originator would not know anything about the deployment details of the cluster, it would just know of a single queue to direct all messages to. When a message is received, servers would need to dump all unwanted messages to a 'not my message' queue.
To solve #3 there would be one queue where all inbound messages are received and a second where messages with specific routing would be placed. That makes a total of two distributed queues, instead of one queue per server instance.
My goal is to place the burden of getting the correct messages on the consumer, leaving the message provider agnostic of the consumer deployment details.