JMS (2)
異步隊列消息的接收有一點區別,但發送的代碼不用改變:
1
@Stateless
2
public class JMSReceiveBean implements JMSReceiveRemote {
3
4
@Resource(name = "jms/Queue")
5
private Queue queue;
6
@Resource(name = "jms/ConnectionFactory")
7
private ConnectionFactory queueFactory;
8
9
private void receiveJMSMessageFromQueue() throws Exception {
10
Connection connection = null;
11
Session session = null;
12
connection = queueFactory.createConnection();
13
session = connection.createSession(false, javax.jms.Session.AUTO_ACKNOWLEDGE);
14
MessageConsumer consumer = session.createConsumer(queue);
15
consumer.setMessageListener(new MessageListener() {
16
17
public void onMessage(Message message) {
18
TextMessage msg = (TextMessage) message;
19
try {
20
String txt = msg.getText();
21
Logger.getLogger(JMSReceiveBean.class.getName()).log(Level.SEVERE, txt);
22
} catch (Exception ex) {
23
ex.printStackTrace();
24
}
25
}
26
});
27
28
connection.start();
29
}
30
31
public void receiveMessage() {
32
try {
33
receiveJMSMessageFromQueue();
34
} catch (Exception ex) {
35
Logger.getLogger(JMSReceiveBean.class.getName()).log(Level.SEVERE, null, ex);
36
}
37
}
38
}

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

在15行消息使用者上設置了一個消息監聽器,而沒有使用同步的receive方法。由于這是異步接收消息,程序并沒有處于阻塞狀態,為了避免在接收到消息之前連接終止,所以在28行之后并沒有關閉Connection,實際上這一步是不可缺少的。
posted @ 2008-09-14 16:40 waynemao 閱讀(115) | 評論 (0) | 編輯 收藏