JMS
来源:互联网 发布:fast隐藏网络 编辑:程序博客网 时间:2024/06/07 20:14
JMS
在这一节中,我们将分析两个进行点对点消息接发的程序—— QSender.java 和
QReceiver.java。
我们将在一些小节中分析代码并描述每一小节的功能。
2、QSender:提示输入 JNDI 名称~
这两个示例程序都是命令行程序, 用 System.in 输入、用 System.out 输出。
QSender 类有两个方法:main(String[]) 和 send()。main(String[]) 方法只举
例说明了 QSender ,并调用了它的 send() 方法。send() 方法的第一部分提示输
入用来发送消息受管理对象的 JNDI 的名称。
1. *import* java.io.*;
2. *import* javax.jms.*;
3. *import* javax.naming.*;
4.
5. *public* *class* QSender {
6.
7. *public* *static* *void* main(String[] args) {
8.
9. *new* QSender().send();
10. }
11.
12. *public* *void* send() {
13.
14. BufferedReader reader = *new* BufferedReader(*new* InputStreamReader(System.in));
15.
16. *try* {
17. //Prompt for JNDI names
18. System.out.println("Enter QueueConnectionFactory name:");
19. String factoryName = reader.readLine();
20. System.out.println("Enter Queue name:");
21. String queueName = reader.readLine();
22. . . .
3、QSender查找管理对象
send() 方法的第二部分用前面输入的名字在 JNDI 中查找受管理的对象。通过举
例说明 InitialContext 对象访问 JNDI,通过调用lookup(String) 方法并传递要
获取的对象的名字来检索受管理的对象。注意, lookup(String) 方法返回的是
Object,所以必须对返回的对象进行类型强制转换。
1. . . .
2. //Look up administered objects
3. InitialContext initContext = *new* InitialContext();
4. QueueConnectionFactory factory =
5. (QueueConnectionFactory) initContext.lookup(factoryName);
6. Queue queue = (Queue) initContext.lookup(queueName);
7. initContext.close();
8. . . .
4、QSender:创建 JMS 对象
现在,我们已创建了发送消息所需要的 JMS 对象。注意,我们没有用 new 直接举
例说明这些对象。所有对象都是通过调用另一个对象的方法创建的。
首先,用 QueueConnectionFactory 创建 QueueConnection。然后用
QueueConnection 创建一个 QueueSession。
QueueSession 不是经过处理的(false),并且它将使用自动确认
(Session.AUTO_ACKNOWLEDGE)。
最后,创建 QueueSender 将信息发送到从 JNDI 中检索的 Queue 发送消息。
1. . . .
2. //Create JMS objects
3. QueueConnection connection = factory.createQueueConnection();
4. QueueSession session =
5. connection.createQueueSession(*false*, Session.AUTO_ACKNOWLEDGE);
6. QueueSender sender = session.createSender(queue);
7. . . .
5、QSender:发送消息
现在就可以发送消息了。在这一部分中,我们进入一个循环,该循环提示我们要发
送的消息的文本。如果用户输入 quit,则退出循环。
否则要在输入的文本中建立一个 TextMessage ,并用 QueueSender 发送消息,然
后返回循环的开始部分。
1. . . .
2. //Send messages
3. String messageText = *null*;
4. *while* (*true*) {
5. System.out.println("Enter message to send or ‘quit‘:");
6. messageText = reader.readLine();
7. *if* ("quit".equals(messageText))
8. *break*;
9. TextMessage message = session.createTextMessage(messageText);
10. sender.send(message);
11. }
12. . . .
6、QSender:退出
退出循环后,关闭 QueueConnection。关闭 QueueConnection 会自动关闭
QueueSession 和 QueueSender。
java代码
1. . . .
2. //Exit
3. System.out.println("Exiting...");
4. reader.close();
5. connection.close();
6. System.out.println("Goodbye!");
7.
8. } *catch* (Exception e) {
9. e.printStackTrace();
10. System.exit(1);
11. }
12. }
7、QReceiver提示输入 JNDI 名称并查找受管理的对象
QReceiver 类与 QSender 类非常类似,都有一个 main(String[]) 方法,它只举
例说明 QReceiver 并调用了它的主要方法 receive()。
提示输入 JNDI 名字并查找受管理对象的代码与 QSender 中的代码完全一样。
不过,在这个类中有两处不一样的地方:
boolean stop 实例变量被用来指出程序应该退出。
QReceiver 可以实现 MessageListener 接口来异步接收消息。
1. *import* java.io.*;
2. *import* javax.jms.*;
3. *import* javax.naming.*;
4.
5. *public* *class* QReceiver *implements* MessageListener {
6.
7. *private* *boolean* stop = *false*;
8.
9. *public* *static* *void* main(String[] args) {
10.
11. *new* QReceiver().receive();
12. }
13.
14. *public* *void* receive() {
15.
16. BufferedReader reader = *new* BufferedReader(*new* InputStreamReader(System.in));
17.
18. *try* {
19. //Prompt for JNDI names
20. System.out.println("Enter QueueConnectionFactory name:");
21. String factoryName = reader.readLine();
22. System.out.println("Enter Queue name:");
23. String queueName = reader.readLine();
24. reader.close();
25.
26. //Look up administered objects
27. InitialContext initContext = *new* InitialContext();
28. QueueConnectionFactory factory =
29. (QueueConnectionFactory) initContext.lookup(factoryName);
30. Queue queue = (Queue) initContext.lookup(queueName);
31. initContext.close();
32. . . .
8、QReceiver:创建 JMS 对象
像在 QSender 中那样创建 QueueConnection 和 QueueSession,然后创建一个
QueueReceiver。
接着,调用 setMessageListener(),传递 QReceiver 的本地实例 this,我们将
重调它来实现 MessageListener 接口。
最后,启动 QueueConnection 来接收消息。
1. . . .
2. //Create JMS objects
3. QueueConnection connection = factory.createQueueConnection();
4. QueueSession session =
5. connection.createQueueSession(*false*, Session.AUTO_ACKNOWLEDGE);
6. QueueReceiver receiver = session.createReceiver(queue);
7. receiver.setMessageListener(*this*);
8. connection.start();
9. . . .
9、QReceiver:等待 stop 并退出
接着,程序进入一个循环,它会在 stop 变量变为 true 时退出循环。在循环中,
线程睡眠一秒钟。一旦退出循环, QueueConnection 就会退出,并且程序也会终止
1. . . .
2. //Wait for stop
3. *while* (!stop) {
4. Thread.sleep(1000);
5. }
6.
7. //Exit
8. System.out.println("Exiting...");
9. connection.close();
10. System.out.println("Goodbye!");
11.
12. } *catch* (Exception e) {
13. e.printStackTrace();
14. System.exit(1);
15. }
16. }
17. . . .
10、QReceiver:onMessage(Message) 方法
需要包含 QReceiver 类的 onMessage(Message) 方法,因为 QReceiver 可以实现
MessageListener 接口。
接收消息时,就调用这个方法,并将 Message 作为参数传递。
在这个实现中,我们获得了消息的文本内容,并将它打印到 System.out。然后,
检查消息是否等于 stop,如果是,则将 stop 变量设置为 true,这会使
receive() 方法中的循环终止。
1. . . .
2. *public* *void* onMessage(Message message) {
3.
4. *try* {
5. String msgText = ((TextMessage) message).getText();
6. System.out.println(msgText);
7. *if* ("stop".equals(msgText))
8. stop = *true*;
9. } *catch* (JMSException e) {
10. e.printStackTrace();
11. stop = *true*;
12. }
13. }
14. }
11、源码QSender.java 的代码清单
java 代码
1. *import* java.io.*;
2. *import* javax.jms.*;
3. *import* javax.naming.*;
4.
5. *public* *class* QSender {
6.
7. *public* *static* *void* main(String[] args) {
8.
9. *new* QSender().send();
10. }
11.
12. *public* *void* send() {
13.
14. BufferedReader reader = *new* BufferedReader(*new* InputStreamReader(System.in));
15.
16. *try* {
17. //Prompt for JNDI names
18. System.out.println("Enter QueueConnectionFactory name:");
19. String factoryName = reader.readLine();
20. System.out.println("Enter Queue name:");
21. String queueName = reader.readLine();
22.
23. //Look up administered objects
24. InitialContext initContext = *new* InitialContext();
25. QueueConnectionFactory factory =
26. (QueueConnectionFactory) initContext.lookup(factoryName);
27. Queue queue = (Queue) initContext.lookup(queueName);
28. initContext.close();
29.
30. //Create JMS objects
31. QueueConnection connection = factory.createQueueConnection();
32. QueueSession session =
33. connection.createQueueSession(*false*, Session.AUTO_ACKNOWLEDGE);
34. QueueSender sender = session.createSender(queue);
35.
36. //Send messages
37. String messageText = *null*;
38. *while* (*true*) {
39. System.out.println("Enter message to send or ‘quit‘:");
40. messageText = reader.readLine();
41. *if* ("quit".equals(messageText))
42. *break*;
43. TextMessage message = session.createTextMessage(messageText);
44. sender.send(message);
45. }
46.
47. //Exit
48. System.out.println("Exiting...");
49. reader.close();
50. connection.close();
51. System.out.println("Goodbye!");
52.
53. } *catch* (Exception e) {
54. e.printStackTrace();
55. System.exit(1);
56. }
57. }
58. }
12、源码QReceiver .java 的代码清单
java 代码
1. *import* java.io.*;
2. *import* javax.jms.*;
3. *import* javax.naming.*;
4.
5. *public* *class* QReceiver *implements* MessageListener {
6.
7. *private* *boolean* stop = *false*;
8.
9. *public* *static* *void* main(String[] args) {
10.
11. *new* QReceiver().receive();
12. }
13.
14. *public* *void* receive() {
15.
16. BufferedReader reader = *new* BufferedReader(*new* InputStreamReader(System.in));
17.
18. *try* {
19. //Prompt for JNDI names
20. System.out.println("Enter QueueConnectionFactory name:");
21. String factoryName = reader.readLine();
22. System.out.println("Enter Queue name:");
23. String queueName = reader.readLine();
24. reader.close();
25.
26. //Look up administered objects
27. InitialContext initContext = *new* InitialContext();
28. QueueConnectionFactory factory =
29. (QueueConnectionFactory) initContext.lookup(factoryName);
30. Queue queue = (Queue) initContext.lookup(queueName);
31. initContext.close();
32.
33. //Create JMS objects
34. QueueConnection connection = factory.createQueueConnection();
35. QueueSession session =
36. connection.createQueueSession(*false*, Session.AUTO_ACKNOWLEDGE);
37. QueueReceiver receiver = session.createReceiver(queue);
38. receiver.setMessageListener(*this*);
39. connection.start();
40.
41. //Wait for stop
42. *while* (!stop) {
43. Thread.sleep(1000);
44. }
45.
46. //Exit
47. System.out.println("Exiting...");
48. connection.close();
49. System.out.println("Goodbye!");
50.
51. } *catch* (Exception e) {
52. e.printStackTrace();
53. System.exit(1);
54. }
55. }
56.
57. *public* *void* onMessage(Message message) {
58.
59. *try* {
60. String msgText = ((TextMessage) message).getText();
61. System.out.println(msgText);
62. *if* ("stop".equals(msgText))
63. stop = *true*;
64. } *catch* (JMSException e) {
65. e.printStackTrace();
66. stop = *true*;
67. }
68. }
69. }
JMS(Java Message Service,Java消息服务)是一组Java应用接口,它提供创建、发送、接收、读取消息的服务。JMS API定义了一组公共的应用程序接口和相应语法,使得Java应用能够和各种消息中间件进行通信,这些消息中间件包括IBM MQ-Series、Microsoft MSMQ及纯Java的SonicMQ。通过使用JMS API,开发人员无需掌握不同消息产品的使用方法,也可以使用统一的JMS API来操纵各种消息中间件。通过使用JMS,能够最大限度地提升消息应用的可移植性。 JMS既支持点对点的消息通信,也支持发布/订阅式的消息通信.
在这一节中,我们将分析两个进行点对点消息接发的程序—— QSender.java 和
QReceiver.java。
我们将在一些小节中分析代码并描述每一小节的功能。
2、QSender:提示输入 JNDI 名称~
这两个示例程序都是命令行程序, 用 System.in 输入、用 System.out 输出。
QSender 类有两个方法:main(String[]) 和 send()。main(String[]) 方法只举
例说明了 QSender ,并调用了它的 send() 方法。send() 方法的第一部分提示输
入用来发送消息受管理对象的 JNDI 的名称。
1. *import* java.io.*;
2. *import* javax.jms.*;
3. *import* javax.naming.*;
4.
5. *public* *class* QSender {
6.
7. *public* *static* *void* main(String[] args) {
8.
9. *new* QSender().send();
10. }
11.
12. *public* *void* send() {
13.
14. BufferedReader reader = *new* BufferedReader(*new* InputStreamReader(System.in));
15.
16. *try* {
17. //Prompt for JNDI names
18. System.out.println("Enter QueueConnectionFactory name:");
19. String factoryName = reader.readLine();
20. System.out.println("Enter Queue name:");
21. String queueName = reader.readLine();
22. . . .
3、QSender查找管理对象
send() 方法的第二部分用前面输入的名字在 JNDI 中查找受管理的对象。通过举
例说明 InitialContext 对象访问 JNDI,通过调用lookup(String) 方法并传递要
获取的对象的名字来检索受管理的对象。注意, lookup(String) 方法返回的是
Object,所以必须对返回的对象进行类型强制转换。
1. . . .
2. //Look up administered objects
3. InitialContext initContext = *new* InitialContext();
4. QueueConnectionFactory factory =
5. (QueueConnectionFactory) initContext.lookup(factoryName);
6. Queue queue = (Queue) initContext.lookup(queueName);
7. initContext.close();
8. . . .
4、QSender:创建 JMS 对象
现在,我们已创建了发送消息所需要的 JMS 对象。注意,我们没有用 new 直接举
例说明这些对象。所有对象都是通过调用另一个对象的方法创建的。
首先,用 QueueConnectionFactory 创建 QueueConnection。然后用
QueueConnection 创建一个 QueueSession。
QueueSession 不是经过处理的(false),并且它将使用自动确认
(Session.AUTO_ACKNOWLEDGE)。
最后,创建 QueueSender 将信息发送到从 JNDI 中检索的 Queue 发送消息。
1. . . .
2. //Create JMS objects
3. QueueConnection connection = factory.createQueueConnection();
4. QueueSession session =
5. connection.createQueueSession(*false*, Session.AUTO_ACKNOWLEDGE);
6. QueueSender sender = session.createSender(queue);
7. . . .
5、QSender:发送消息
现在就可以发送消息了。在这一部分中,我们进入一个循环,该循环提示我们要发
送的消息的文本。如果用户输入 quit,则退出循环。
否则要在输入的文本中建立一个 TextMessage ,并用 QueueSender 发送消息,然
后返回循环的开始部分。
1. . . .
2. //Send messages
3. String messageText = *null*;
4. *while* (*true*) {
5. System.out.println("Enter message to send or ‘quit‘:");
6. messageText = reader.readLine();
7. *if* ("quit".equals(messageText))
8. *break*;
9. TextMessage message = session.createTextMessage(messageText);
10. sender.send(message);
11. }
12. . . .
6、QSender:退出
退出循环后,关闭 QueueConnection。关闭 QueueConnection 会自动关闭
QueueSession 和 QueueSender。
java代码
1. . . .
2. //Exit
3. System.out.println("Exiting...");
4. reader.close();
5. connection.close();
6. System.out.println("Goodbye!");
7.
8. } *catch* (Exception e) {
9. e.printStackTrace();
10. System.exit(1);
11. }
12. }
7、QReceiver提示输入 JNDI 名称并查找受管理的对象
QReceiver 类与 QSender 类非常类似,都有一个 main(String[]) 方法,它只举
例说明 QReceiver 并调用了它的主要方法 receive()。
提示输入 JNDI 名字并查找受管理对象的代码与 QSender 中的代码完全一样。
不过,在这个类中有两处不一样的地方:
boolean stop 实例变量被用来指出程序应该退出。
QReceiver 可以实现 MessageListener 接口来异步接收消息。
1. *import* java.io.*;
2. *import* javax.jms.*;
3. *import* javax.naming.*;
4.
5. *public* *class* QReceiver *implements* MessageListener {
6.
7. *private* *boolean* stop = *false*;
8.
9. *public* *static* *void* main(String[] args) {
10.
11. *new* QReceiver().receive();
12. }
13.
14. *public* *void* receive() {
15.
16. BufferedReader reader = *new* BufferedReader(*new* InputStreamReader(System.in));
17.
18. *try* {
19. //Prompt for JNDI names
20. System.out.println("Enter QueueConnectionFactory name:");
21. String factoryName = reader.readLine();
22. System.out.println("Enter Queue name:");
23. String queueName = reader.readLine();
24. reader.close();
25.
26. //Look up administered objects
27. InitialContext initContext = *new* InitialContext();
28. QueueConnectionFactory factory =
29. (QueueConnectionFactory) initContext.lookup(factoryName);
30. Queue queue = (Queue) initContext.lookup(queueName);
31. initContext.close();
32. . . .
8、QReceiver:创建 JMS 对象
像在 QSender 中那样创建 QueueConnection 和 QueueSession,然后创建一个
QueueReceiver。
接着,调用 setMessageListener(),传递 QReceiver 的本地实例 this,我们将
重调它来实现 MessageListener 接口。
最后,启动 QueueConnection 来接收消息。
1. . . .
2. //Create JMS objects
3. QueueConnection connection = factory.createQueueConnection();
4. QueueSession session =
5. connection.createQueueSession(*false*, Session.AUTO_ACKNOWLEDGE);
6. QueueReceiver receiver = session.createReceiver(queue);
7. receiver.setMessageListener(*this*);
8. connection.start();
9. . . .
9、QReceiver:等待 stop 并退出
接着,程序进入一个循环,它会在 stop 变量变为 true 时退出循环。在循环中,
线程睡眠一秒钟。一旦退出循环, QueueConnection 就会退出,并且程序也会终止
1. . . .
2. //Wait for stop
3. *while* (!stop) {
4. Thread.sleep(1000);
5. }
6.
7. //Exit
8. System.out.println("Exiting...");
9. connection.close();
10. System.out.println("Goodbye!");
11.
12. } *catch* (Exception e) {
13. e.printStackTrace();
14. System.exit(1);
15. }
16. }
17. . . .
10、QReceiver:onMessage(Message) 方法
需要包含 QReceiver 类的 onMessage(Message) 方法,因为 QReceiver 可以实现
MessageListener 接口。
接收消息时,就调用这个方法,并将 Message 作为参数传递。
在这个实现中,我们获得了消息的文本内容,并将它打印到 System.out。然后,
检查消息是否等于 stop,如果是,则将 stop 变量设置为 true,这会使
receive() 方法中的循环终止。
1. . . .
2. *public* *void* onMessage(Message message) {
3.
4. *try* {
5. String msgText = ((TextMessage) message).getText();
6. System.out.println(msgText);
7. *if* ("stop".equals(msgText))
8. stop = *true*;
9. } *catch* (JMSException e) {
10. e.printStackTrace();
11. stop = *true*;
12. }
13. }
14. }
11、源码QSender.java 的代码清单
java 代码
1. *import* java.io.*;
2. *import* javax.jms.*;
3. *import* javax.naming.*;
4.
5. *public* *class* QSender {
6.
7. *public* *static* *void* main(String[] args) {
8.
9. *new* QSender().send();
10. }
11.
12. *public* *void* send() {
13.
14. BufferedReader reader = *new* BufferedReader(*new* InputStreamReader(System.in));
15.
16. *try* {
17. //Prompt for JNDI names
18. System.out.println("Enter QueueConnectionFactory name:");
19. String factoryName = reader.readLine();
20. System.out.println("Enter Queue name:");
21. String queueName = reader.readLine();
22.
23. //Look up administered objects
24. InitialContext initContext = *new* InitialContext();
25. QueueConnectionFactory factory =
26. (QueueConnectionFactory) initContext.lookup(factoryName);
27. Queue queue = (Queue) initContext.lookup(queueName);
28. initContext.close();
29.
30. //Create JMS objects
31. QueueConnection connection = factory.createQueueConnection();
32. QueueSession session =
33. connection.createQueueSession(*false*, Session.AUTO_ACKNOWLEDGE);
34. QueueSender sender = session.createSender(queue);
35.
36. //Send messages
37. String messageText = *null*;
38. *while* (*true*) {
39. System.out.println("Enter message to send or ‘quit‘:");
40. messageText = reader.readLine();
41. *if* ("quit".equals(messageText))
42. *break*;
43. TextMessage message = session.createTextMessage(messageText);
44. sender.send(message);
45. }
46.
47. //Exit
48. System.out.println("Exiting...");
49. reader.close();
50. connection.close();
51. System.out.println("Goodbye!");
52.
53. } *catch* (Exception e) {
54. e.printStackTrace();
55. System.exit(1);
56. }
57. }
58. }
12、源码QReceiver .java 的代码清单
java 代码
1. *import* java.io.*;
2. *import* javax.jms.*;
3. *import* javax.naming.*;
4.
5. *public* *class* QReceiver *implements* MessageListener {
6.
7. *private* *boolean* stop = *false*;
8.
9. *public* *static* *void* main(String[] args) {
10.
11. *new* QReceiver().receive();
12. }
13.
14. *public* *void* receive() {
15.
16. BufferedReader reader = *new* BufferedReader(*new* InputStreamReader(System.in));
17.
18. *try* {
19. //Prompt for JNDI names
20. System.out.println("Enter QueueConnectionFactory name:");
21. String factoryName = reader.readLine();
22. System.out.println("Enter Queue name:");
23. String queueName = reader.readLine();
24. reader.close();
25.
26. //Look up administered objects
27. InitialContext initContext = *new* InitialContext();
28. QueueConnectionFactory factory =
29. (QueueConnectionFactory) initContext.lookup(factoryName);
30. Queue queue = (Queue) initContext.lookup(queueName);
31. initContext.close();
32.
33. //Create JMS objects
34. QueueConnection connection = factory.createQueueConnection();
35. QueueSession session =
36. connection.createQueueSession(*false*, Session.AUTO_ACKNOWLEDGE);
37. QueueReceiver receiver = session.createReceiver(queue);
38. receiver.setMessageListener(*this*);
39. connection.start();
40.
41. //Wait for stop
42. *while* (!stop) {
43. Thread.sleep(1000);
44. }
45.
46. //Exit
47. System.out.println("Exiting...");
48. connection.close();
49. System.out.println("Goodbye!");
50.
51. } *catch* (Exception e) {
52. e.printStackTrace();
53. System.exit(1);
54. }
55. }
56.
57. *public* *void* onMessage(Message message) {
58.
59. *try* {
60. String msgText = ((TextMessage) message).getText();
61. System.out.println(msgText);
62. *if* ("stop".equals(msgText))
63. stop = *true*;
64. } *catch* (JMSException e) {
65. e.printStackTrace();
66. stop = *true*;
67. }
68. }
69. }
0 0
- JMS
- JMS
- JMS
- JMS
- JMS
- JMS
- JMS
- JMS
- JMS
- JMS
- JMS
- JMS
- jms
- JMS
- JMS
- JMS
- JMS
- JMS
- CRect类的介绍
- 博客已搬至http://www.wengchichi.com
- 2014-2-13 java 异常 日记
- 动态代理
- java 父构造器中调用子类重写的方法
- JMS
- ubuntu中IDE安裝.
- 重新布局窗口RecalcLayout
- Jquery Uploadify多文件上传带进度条且传递自己的参数示例
- Android操作系统架构
- scala 开发spark程序
- Android中给button添加响应事件的4种方法
- javascript模块化编程
- 开发框架——横版格斗——1.资源导入