Помогите!!
создаётся (не важно программно или через консоль) Queue
в Queue отправляется сообщение , всё замечательно работает, пытаюсь предусмотреть случай, когда по какой -то причине получатель не может забрать сообщения из Queue , по логики программы передача всех сообщений должна начинатся или с последнего не принятого, или с самого начала ( в зависимости от установки).
Когда надо принемать сообщения начиная с последнего принятого, всё замечательно, а вот когда надо начинать всё с начала столкнулся с проблемой , алгоритм следующий:
1) Создали Queue F
2) Отправили сообщение
3) Убили Queue F
4) Создали Queue F
а там лежат сообщения , а хотелось бы что бы при удалении Queue сообщения не полученные пропадали
Поставил messageT.setJMSDeliveryMode(0); всё равно остаются, что делать??
отправка
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
public String message(String message, String clientId) {
//String queueName = "queue/vaspQueue";
Context jndiContext = null ;
QueueConnectionFactory queueConnectionFactory = null ;
QueueConnection queueConnection = null ;
QueueSession queueSession = null ;
Queue queue = null ;
QueueSender queueSender = null ;
TextMessage messageT = null ;
log.info("Registered a message: '"+ message+"', Client: '"+clientId+"'");
try {
jndiContext = new InitialContext();
queueConnectionFactory = (QueueConnectionFactory)
jndiContext.lookup("QueueConnectionFactory");
queue = (Queue) jndiContext.lookup(clientId);
queueConnection = queueConnectionFactory.createQueueConnection();
queueSession = queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
queueSender = queueSession.createSender(queue);
messageT = queueSession.createTextMessage();
messageT.setText(message);
messageT.setJMSType("news");
messageT.setJMSDeliveryMode( 0 );
queueSender.send(messageT);
//queueSender.send(queueSession.createMessage());
} catch (Exception e) {
log.error("Exception occurred: " + e.toString());
} finally {
if (queueConnection != null ) {
try {
queueConnection.close();
} catch (Exception e) {}
}
}
return message;
}
получение ( часть кода не имеющая отношение к вопросу удалена)
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
public String getNewMessages(String clientId) {
log.debug("getNewMessages");
Context jndiContext = null ;
QueueConnectionFactory queueConnectionFactory = null ;
QueueConnection queueConnection = null ;
QueueSession queueSession = null ;
QueueReceiver queueReceiver = null ;
Message m;
String response;
int index;
response = new String();
response = "<html>\n" +
" <head>\n" +
" <script language='JavaScript'>\n" +
" var messages = new Array();\n";
log.debug("response 1");
try {
jndiContext = new InitialContext();
queueConnectionFactory = (QueueConnectionFactory)jndiContext.lookup("QueueConnectionFactory");
queueConnection = queueConnectionFactory.createQueueConnection();
queueSession = queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = null ;
log.debug("Queue queue = null;");
try {
log.debug("try");
queue = (Queue) jndiContext.lookup(clientId);
log.debug("queue = (Queue) jndiContext.lookup(clientId);");
} catch (NameNotFoundException nnfe){
log.debug("catch");
queue = queueSession.createQueue(clientId);
jndiContext.bind(clientId, queue);
log.debug("queue = queueSession.createQueue(clientId)");
}
log.debug("queueBrowswr = queueSession.createBrowser(queue);");
QueueBrowser queueBrowswr = queueSession.createBrowser(queue);
log.debug("queueSession.createReceiver(queue);");
queueReceiver = queueSession.createReceiver(queue);
log.debug(" queueConnection.start();");
queueConnection.start();
index = 0 ;
log.debug("for(;;)");
for (;;){
if (queueBrowswr.getEnumeration().hasMoreElements()) {
log.debug("queueBrowswr.getEnumeration().hasMoreElements()");
TextMessage message = (TextMessage) queueBrowswr.getEnumeration().nextElement();
if (message.getJMSType().equals("news")){
log.debug("message.getJMSType().equals(news)");
message = (TextMessage) queueReceiver.receive( 1000 );
response += " messages[" + index + "] = '" + message.getText() + "';\n";
log.info("Message " + index + ": " + message.getText());
index ++;
} else {
break ;
}
} else {
break ;
}
}
} catch (Exception e) {
log.error("Exception occurred: " + e.getStackTrace());
e.printStackTrace();
} finally {
if (queueConnection != null ) {
try {
queueConnection.close();
} catch (Exception e) {}
}
}
response += " </script>\n" +
" </head>\n" +
" <body onload='top.clientReceiverCallback()'>\n" +
" </body>\n" +
"</html>\n";
return response;
}