Sziasztok!
A következő a problémám: van egy szolgáltatásunk ami JMS queue-be dobja a elvégzendő feladatokat (sms küldés).
Vannak olyan SMS-ek amelyeknek hamarabb ki kell menniük és vannak olyanok amik ráérnek. Ennek megfelelően van priorizálva a queuq berakáskor.
connection = smsQueueFactory.createConnection();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer messageProducer = session.createProducer(smsQueue);
messageProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
messageProducer.setPriority(prioritas);
MapMessage tm = session.createMapMessage();
tm.setInt("smsKod", smsKod);
messageProducer.send(tm);
Azt tapasztalom hogy amikor bedobok sok alacsony prioritású üzenetet, és később egy magas prioritásút, akkor nem az történik mint várnám hogy a magasabb előre kerül és hamarabb kerül feldolgozásra.
Úgy tűnik nekem hogy a prioritás az másodlagos, elsődleges szempont hogy mikor került be a queuba, és azon belül veszi figyel a prioritást, létezik ez? Valaki találkozott már ezzel a a problémával?
Ötlet, javaslat?
Esetleg elrontok valamit ?
Glassfish 3.1.x - NetBeans fejlesztő környezet 1.6.x Java, OpenMQ (ami a gf-ben van)
4 Comments
Auth Gábor
Ránézésre jónak kellene lennie... hm... esetleg megpróbálhatnád a másik send metódust... de sajnos nincs ötletem.
András Gyula Kerekes
Szia!
Próbáltam sajnos nem segített.
Készítettem egy tesztet hogy hogyan is viselkedik.
A van egy SessionBean-em ami lényegi részt tekintve így néz ki:
A moreSendQueue ManagedBean oldalról hívom a metódust akkor a queue-ba bekerül 10 db 1 prioritású üzenet.
majd ugyan ebből a ManagedBean -ből meghívom a sendMagas metódust elhelyez egy magas prioritású üzenetet
a végrehajtása a következőkép történik
0, Alacsony prioritású, Prioritás: 1, Timestamp 2013.08.20 16:08:42.093
1, Alacsony prioritású, Prioritás: 1, Timestamp 2013.08.20 16:08:42.094
// kb itt került be queue-ba a "Magas prioritású, Prioritás: 9" üzenet
2, Alacsony prioritású, Prioritás: 1, Timestamp 2013.08.20 16:08:42.095
3, Alacsony prioritású, Prioritás: 1, Timestamp 2013.08.20 16:08:42.095
4, Alacsony prioritású, Prioritás: 1, Timestamp 2013.08.20 16:08:42.096
5, Alacsony prioritású, Prioritás: 1, Timestamp 2013.08.20 16:08:42.097
6, Alacsony prioritású, Prioritás: 1, Timestamp 2013.08.20 16:08:42.097
7, Alacsony prioritású, Prioritás: 1, Timestamp 2013.08.20 16:08:42.098
8, Alacsony prioritású, Prioritás: 1, Timestamp 2013.08.20 16:08:42.099
9, Alacsony prioritású, Prioritás: 1, Timestamp 2013.08.20 16:08:42.099
Magas prioritású, Prioritás: 9, Timestamp 2013.08.20 16:08:43.470
Módosítottam a moreSendQueue metódust úgy hogy egymás után nagyobb prioritású üzeneteket küldjön be.
9, Alacsony prioritású, Prioritás: 9, Timestamp 2013.08.20 16:13:16.142
8, Alacsony prioritású, Prioritás: 8, Timestamp 2013.08.20 16:13:16.141
7, Alacsony prioritású, Prioritás: 7, Timestamp 2013.08.20 16:13:16.125
6, Alacsony prioritású, Prioritás: 6, Timestamp 2013.08.20 16:13:16.124
5, Alacsony prioritású, Prioritás: 5, Timestamp 2013.08.20 16:13:16.124
4, Alacsony prioritású, Prioritás: 4, Timestamp 2013.08.20 16:13:16.123
3, Alacsony prioritású, Prioritás: 3, Timestamp 2013.08.20 16:13:16.123
2, Alacsony prioritású, Prioritás: 2, Timestamp 2013.08.20 16:13:16.122
1, Alacsony prioritású, Prioritás: 1, Timestamp 2013.08.20 16:13:16.121
0, Alacsony prioritású, Prioritás: 0, Timestamp 2013.08.20 16:13:16.120
Magas prioritású, Prioritás: 9, Timestamp 2013.08.20 16:13:16.908
Mint látszik is moreSendQueue hívásakor bekerülő üzeneteket priorizálva dolgozza fel.
Azt hiszem valami ilyesmi kellene nekem csak OpenMQ -ra:
http://activemq.apache.org/how-can-i-support-priority-queues.html
Ötlet?
Auth Gábor
Sajnos nincs ötletem... :/
Ha lesz egy kis időm, akkor játszadozok majd ezzel a dologgal, de most sajnos nincs elegendő időm...
Ha találsz megoldást, akkor azért ne tartsd magadban...
András Gyula Kerekes
Úgy néz ki megtaláltam a megoldást!
Az OpenMQ egyik paraméterét kell át álltani, mégpedig a consumerFlowLimit -et.
Bővebb információ:
http://openmessaging.blogspot.hu/2009/03/consumer-flow-control-and-message.html
http://openmessaging.blogspot.hu/2009/08/how-to-set-arbitrary-broker-properties.html
Köszi a segítséget!