一,介绍

本文介绍一个简单的聊天应用程序:生产者将消息发送到Topic上,然后由ActiveMQ将该消息Push给订阅了该Topic的消费者。示例程序来自于《JAVA 消息服务--第二版 Mark Richards著》

二,项目开发环境搭建

①使用Eclipse新建一个JAVA工程:jms_activemq

②添加依赖包:activemq-all-5.13.2.jar

③创建JNDI文件: jndi.properties,并将之放到classpath下(即eclipse项目的 src 目录)。   文件内容如下:

  1. java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory
  2. java.naming.provider.url=tcp://192.168.121.35:61616
  3. java.naming.security.principal=system
  4. java.naming.security.credentials=manager
  5.  
  6. # use the following property to specify the JNDI name the connection factory
  7. # should appear as.
  8. #connectionFactoryNames = connectionFactory, queueConnectionFactory, topicConnectionFactry
  9. connectionFactoryNames = TopicCF
  10. #TopicConnectionFactory conFactory = (TopicConnectionFactory)ctx.lookup(topicFactory)
  11.  
  12. # register some queues in JNDI using the form
  13. # queue.[jndiName] = [physicalName]
  14. ## queue.MyQueue = example.MyQueue
  15.  
  16. # register some topics in JNDI using the form
  17. # topic.[jndiName] = [physicalName]
  18. ## topic.MyTopic = example.MyTopic
  19. topic.topic1=jms.topic1
  20. #Topic chatTopic = (Topic)ctx.lookup(topicName);

注意:jndi.properties文件中的值不要拼写错误了(此外,等号右边的值的末尾,不能带有空格!!!)。否则会抛出:java.lang.ClassNotFoundException

④新建源文件。编写程序。项目截图如下:

aaarticlea/png;base64,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" alt="" />

⑤配置activemq.xml文件,在broker下 添加一个 destinations,并启动ActiveMQ

配置如下:

aaarticlea/png;base64,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" alt="" />

这里详细说下如下启动ActiveMQ,一种方式是在前台启动,另一个方式是在后台启动。如果在前台终端中启动的话,当关闭终端后程序也就终止了。而在后台启动,关闭终端不影响它的启动。

前台启动: ./bin/activemq start    或者   ./bin/activemq console

后台启动:参考

  1. nohup ./bin/activemq start &

在后台启动后,如何关闭呢?首先找到相应的进程号: ps -ef | grep activemq,然后 kill pid 即可。

三,JNDI解释

JNDI是一个与具体实现无关的API,不管你用的是ActiveMQ还是WebSphereMQ还是Microsoft Message Queuing,它都可用作目录服务。JMS Client使用目录服务来访问ConnectionFactory和Destination(即主题和队列对象)。

ConnectionFactory及Destination 与JMS中的Producer、Consumer、Session、Connection不同,后者是用JMS API通过工厂模式直接生成的。而前者则需要JNDI查询获得。

  1. JMS中,JNDI主要用于命名服务来定位受管对象。受管对象就是由系统管理员创建和配置的JMS对象。受管对象包括JMS ConnectionFactory Destination 对象
  2.  
  3. 受管对象和命名服务中的一个名称相互绑定在一起。一个命名服务将名称和分布式对象、文件、设施关联起来,以便它们可以使用简单的名称而不是密码似的网络地址实现在网络上的定位。
    如,DNS,它将域名www.cnblogs.com 转换成一个网络地址(ip),而浏览器使用该ip连接到web服务器上
  4.  
  5. 命名服务将分布式对象、JMS受管对象……和名称相互绑定,并按照和文件系统相似的层次进行组织
  6.  
  7. JNDI提供了一个隐藏命名服务细节的抽象。使用JNDIJMS Client 能够浏览一个命名服务,并在不知道命名服务细节的情况下引用受管对象。
  8.  
  9. 通常,JMS服务器会和一个标准的JNDI驱动器(也称为服务提供者)以及类似于LDAP(轻量级目录访问协议)这样的目录服务 结合使用。或者,JMS 服务器提供一个私有的JNDI服务提供者 目录服务。
  1. java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory
  2. java.naming.provider.url=tcp://192.168.121.35:61616
    //other jndi config......

四,建立连接的详细过程

Chat类的构造函数通过连接JMS服务器使用的JNDI命名服务来建立连接

  1. public Chat(String topicFactory, String topicName, String userName)throws Exception {
  2. InitialContext ctx = new InitialContext();//使用jndi.properties 获得一个JNDI连接

InitialContex就是所有JNDI查找的起始点,相当于文件系统的根目录。它提供了一条到目录服务的网络连接,这个目录服务就发挥访问JMS受管对象的根目录的作用。

在我们的示例中,ActiveMQ就是JMS服务器,JMS受管对象就是在 conf/activemq.xml 文件中配置的destionations 和 ConnectionFactory

通过new一个InitialContex对象,就建立起了一个到ActiveMQ目录服务的连接,然后在ActiveMQ的命名服务中查找TopicConnectionFactory

  1. TopicConnectionFactory conFactory = (TopicConnectionFactory)ctx.lookup(topicFactory);

受管对象TopicConnectionFactory的属性和行为则由系统管理员配置。比如,一个连接工厂可配置为使用特定的协议、安全模式...连接。

有了TopicConnectionFactory之后,就可以创建TopicConnection了。

  1. TopicConnection connection = conFactory.createTopicConnection();

连接的认证则可以在jndi.properties文件中配置

  1. java.naming.security.principal=system
  2. java.naming.security.credentials=manager

TopicConnection表示和消息服务器(ActiveMQ)的一个连接。一个JMS Client 可以选择从同一连接工厂创建多个连接,但是由于创建连接开销很大,一般是从同一连接中创建多个Session对象。

  1. TopicSession pubSession = connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
  2. TopicSession subSession = connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);

关闭TopicConnection将关闭和该连接有关的所有对象,包括TopicSession,TopicPublisher、TopicSubscriber。

TopicSession是创建Message、TopicPublisher、TopicSubscriber对象的工厂,用它来创建TopicPublisher和TopicSubscriber。TopicPublisher和TopicSubscriber对象都有一定特定的Topic标识,且这两个对象专属于创建它们的TopicSession。

  1. TopicPublisher publisher = pubSession.createPublisher(chatTopic);
  2. TopicSubscriber subscriber = pubSession.createSubscriber(chatTopic, null, true);

TopicPublisher向Topic发送消息,TopicSubscriber从Topic订阅消息。JNDI用于定位一个Topic对象,它是类似于TopicConnectionFactory的一个受管对象。

  1. Topic chatTopic = (Topic)ctx.lookup(topicName);

Topic对象是消息服务器上的一个实际主题的句柄,该主题称为物理主题(physical topic)。一个物理主题就是多个Client订阅和发布消息的一条电子通道。

这样,发布者和订阅者就知道往哪里发送/接收消息了。

TopicPublisher是将消息异步发送到Topic,TopicPublisher不会阻塞直到所有的订阅者接收到该消息为止,而是只要消息服务器一接收到消息,TopicPublisher就会从publish()方法返回。

它依赖消息服务器将消息传送给该主题的所有订阅者,消息服务器将消息异步推送给TopicSubscriber。

整个完整程序代码:

  1. import java.io.BufferedReader;
  2. import java.io.InputStreamReader;
  3.  
  4. import javax.jms.JMSException;
  5. import javax.jms.Message;
  6. import javax.jms.MessageListener;
  7. import javax.jms.Session;
  8. import javax.jms.TextMessage;
  9. import javax.jms.Topic;
  10. import javax.jms.TopicConnection;
  11. import javax.jms.TopicConnectionFactory;
  12. import javax.jms.TopicPublisher;
  13. import javax.jms.TopicSession;
  14. import javax.jms.TopicSubscriber;
  15. import javax.naming.InitialContext;
  16.  
  17. public class Chat implements MessageListener{
  18.  
  19. private TopicSession pubSession;
  20. private TopicPublisher publisher;
  21. private TopicConnection connection;
  22. private String userName;
  23.  
  24. public Chat(String topicFactory, String topicName, String userName)throws Exception {
  25. InitialContext ctx = new InitialContext();//使用jndi.properties 获得一个JNDI连接
  26.  
  27. TopicConnectionFactory conFactory = (TopicConnectionFactory)ctx.lookup(topicFactory);
  28. TopicConnection connection = conFactory.createTopicConnection();
  29.  
  30. TopicSession pubSession = connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
  31. TopicSession subSession = connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
  32.  
  33. Topic chatTopic = (Topic)ctx.lookup(topicName);
  34.  
  35. TopicPublisher publisher = pubSession.createPublisher(chatTopic);
  36. TopicSubscriber subscriber = pubSession.createSubscriber(chatTopic, null, true);
  37.  
  38. subscriber.setMessageListener(this);
  39.  
  40. this.connection = connection;
  41. this.pubSession = pubSession;
  42. this.publisher = publisher;
  43. this.userName = userName;
  44.  
  45. connection.start();
  46. }
  47.  
  48. @Override
  49. public void onMessage(Message message) {
  50. try{
  51. TextMessage textMessage = (TextMessage)message;
  52. System.out.println(textMessage.getText());
  53. }catch(JMSException e){e.printStackTrace();}
  54. }
  55.  
  56. public void writeMessage(String text)throws JMSException{
  57. TextMessage message = pubSession.createTextMessage();
  58. message.setText(userName + ": " + text);
  59. publisher.publish(message);
  60. }
  61.  
  62. public void close()throws JMSException{
  63. connection.close();
  64. }
  65.  
  66. public static void main(String[] args) {
  67. try{
  68. if(args.length != 3)
  69. System.out.println("Factory, Topic or userName missing");
  70. Chat chat = new Chat(args[0], args[1], args[2]);
  71.  
  72. BufferedReader commandLine = new java.io.BufferedReader(new InputStreamReader(System.in));
  73.  
  74. while(true){
  75. String s = commandLine.readLine();
  76. if(s.equalsIgnoreCase("exit")){
  77. chat.close();
  78. System.exit(0);
  79. }else
  80. chat.writeMessage(s);
  81. }
  82. }catch(Exception e){e.printStackTrace();}
  83. }
  84. }

JMS学习(四)-一个简单的聊天应用程序分析的更多相关文章

  1. 利用JavaUDPSocket+多线程模拟实现一个简单的聊天室程序

    对Socket的一点个人理解:Socket原意是指插座.家家户户都有五花八门的家用电器,但它们共用统一制式的插座.这样做的好处就是将所有家用电器的通电方式统一化,不需要大费周章地在墙壁上凿洞并专门接电 ...

  2. wordpress学习四: 一个简单的自定义主题

    在学习三里分析了自带的一个例子,本节我们就自己仿照他做个简单的吧,重点是调用wordpress封装好的函数和类,css和html可以稍好在调整. 将wp带的例子复制一份处理,重新名个名字. 清空ind ...

  3. [SignalR]一个简单的聊天室

    原文:[SignalR]一个简单的聊天室 1.说明 开发环境:Microsoft Visual Studio 2010 以及需要安装NuGet. 2.添加SignalR所需要的类库以及脚本文件: 3. ...

  4. TensorFlow练习13: 制作一个简单的聊天机器人

    现在很多卖货公司都使用聊天机器人充当客服人员,许多科技巨头也纷纷推出各自的聊天助手,如苹果Siri.Google Now.Amazon Alexa.微软小冰等等.前不久有一个视频比较了Google N ...

  5. 基于websocket实现的一个简单的聊天室

    本文是基于websocket写的一个简单的聊天室的例子,可以实现简单的群聊和私聊.是基于websocket的注解方式编写的.(有一个小的缺陷,如果用户名是中文,会乱码,不知如何处理,如有人知道,请告知 ...

  6. 用Go语言实现一个简单的聊天机器人

    一.介绍 目的:使用Go语言写一个简单的聊天机器人,复习整合Go语言的语法和基础知识. 软件环境:Go1.9,Goland 2018.1.5. 二.回顾 Go语言基本构成要素:标识符.关键字.字面量. ...

  7. 用ServletContext做一个简单的聊天室

    这里主要是ServletContext的一个特性:ServletContext是一个公共的空间,可以被所有的客户访问.由此可见ServletContext比cookie和session的作用范围要大[ ...

  8. socket实例C语言:一个简单的聊天程序

    我们老师让写一个简单的聊天软件,并且实现不同机子之间的通信,我用的是SOCKET编程.不废话多说了,先附上代码: 服务器端server.c #include <stdio.h> #incl ...

  9. 通过python 构建一个简单的聊天服务器

    构建一个 Python 聊天服务器 一个简单的聊天服务器 现在您已经了解了 Python 中基本的网络 API:接下来可以在一个简单的应用程序中应用这些知识了.在本节中,将构建一个简单的聊天服务器.使 ...

随机推荐

  1. 简单模拟flume

    NetCat方式: 远程访问的方式进行消息传递 配置一个Agent,主要配置三个组件: source, channel, sink 上图中为什么channel会带s,变成channels? 可以绑定多 ...

  2. unity2D以最小的角度旋转到目标方向(y方向为角色的主方向)

    一.使用向量原理转换到目标方向 为了让角色的自身y转向目标方向,并且以最小角度旋转,要点是获得当前方向与目标方向的叉值,从而判断应该旋转的方向 float rotateSpeed; //相对目标位置运 ...

  3. SimpleDateFormat的一些常用用法

    /** SimpleDateFormat函数语法: G 年代标志符 y 年 M 月 d 日 h 时 在上午或下午 (1~12) H 时 在一天中 (0~23) m 分 s 秒 S 毫秒 E 星期 D ...

  4. C#使用结构体,输入5个人的学号,姓名,分数,按照成绩高低排列打印出来

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  5. C# winform打开文件夹并选中指定文件

    例如:打开“E:\Training”文件夹并选中“20131250.html”文件 System.Diagnostics.Process.Start("Explorer.exe", ...

  6. mysql 存储过程中结尾分割符修改

    mysql中修改命令结束符delimiter的用法:mysql中的delimiter会告诉MySQL解释器,命令的结束符是什么,默认情况下MySQL的命令是以分号(;)结束的.在遇到(;)时,MySQ ...

  7. [转帖] mysql 用户 权限 密码等操作记录

    前言 From :https://blog.csdn.net/yu12377/article/details/78214336 mysql5.7版本中用户管理与以前版本略有不同,在此记录,以备忘 登陆 ...

  8. SpringBoot设置事务隔离等级

    "If you're gonna play the game, boy, ya gotta learn to play it right" Spring Boot 使用事务非常简单 ...

  9. POJ 1182 食物链 (拆点并查集)

    食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 78601   Accepted: 23422 Description ...

  10. HDU 5112 A Curious Matt (2014ACM/ICPC亚洲区北京站-重现赛)

    A Curious Matt Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 512000/512000 K (Java/Others) ...