| Author |
Soft Queue Implementations
|
Joe Joseph
Greenhorn
Joined: Jun 21, 2006
Posts: 20
|
|
Hi all, I have a situation that requires me to develop a 'Soft Queue'. First let me explain my requirement. The system under consideration has some 'text' messages flowing at a rate of about 1 msg/sec. This is a critical process & i need to log any failures to processes these msgs to a table. At the same time i do not want to affect the 1 msg/sec rate. Thus i would like to decouple the Message processing process from the Error Message logging process. Also i cannot use JMS Queues or other related Queues. What i require is that the Message Processing method should put the failed text messages in some sort of Queue. The job of Message Processing method ends there. I need a mechanism by which the Error Message logging process will be notified of this & it will log the error in the table. Thus the Message Processing method is not held up till the Error Msg is logged. This is some sort of Consumer-Producer problem & Observerable pattern. Please let me know how i can go about this? Regards, Joe
|
 |
Edward Harned
Ranch Hand
Joined: Sep 19, 2005
Posts: 288
|
|
You can put your error message in a java.util.concurrent.ConcurrentLinkedQueue The queue is FIFO, thread safe and fast. You can notify the message writter thread in a similar fashion to the example given in the interface java.util.concurrent.locks.Condition. At start up, create the Queue. Create the message writer thread passing a reference to the Queue. When you have an error message, put it in the Queue and signal() the message writer thread. The thread await() until there is work. It then retrieves each message until there are no more. The thread goes back to await().
|
Ed's latest article: A Java Parallel Calamity http://coopsoft.com/ar/Calamity2Article.html
|
 |
Joe Joseph
Greenhorn
Joined: Jun 21, 2006
Posts: 20
|
|
Hi, Forgot to mention that i have to use jdk 1.4.2. I cannot use later verions. java.util.concurrent.ConcurrentLinkedQueue is in 1.5
|
 |
Stan James
(instanceof Sidekick)
Ranch Hand
Joined: Jan 29, 2003
Posts: 8791
|
|
|
Find the blocking queue in the Commons Thread Pool. It's very simple and ought to drop right into what you need. The log writer would block on a get message call rather than waiting for a notification. If you don't like that bit we can try to change it around to what you need.
|
A good question is never answered. It is not a bolt to be tightened into place but a seed to be planted and to bear more seed toward the hope of greening the landscape of the idea. John Ciardi
|
 |
Edward Harned
Ranch Hand
Joined: Sep 19, 2005
Posts: 288
|
|
If you can't use 1.5, then do it yourself. Set up a Vector (its synchronized) in place of a 1.5 Queue. Pass a reference to the message writer thread. In place of Condition await()/signal() use Object wait()/notify(). There are plenty of examples of this floating around the web.
|
 |
 |
|
|
subject: Soft Queue Implementations
|
|
|