ActiveMQ实现简单的聊天室功能
2017-03-28 23:58
1381 查看
博主这是经历了整整一个下午的研究,参考书《Java 消息服务》,实现一个简单的聊天功能,使用开源JMS提供者ActiveMQ5.14.4 + JDK1.8简单的聊天室例子。
转载请注明出处http://blog.csdn.net/qq_28695619本人遇见的坑如下,希望对大家有所帮助。
1.ActiveMQ的配置和安装,我的是Win8.1的系统,各位首先需要来这里下载符合自己系统的版本ActiveMQ下载地址,下载完成后,将其解压并且找到对应jar包的路径
环境变量的配置:
往CLASSPATH里面添加如下需要使用的jar包
F:\apache-activemq-5.14.4\activemq-all-5.14.4.jar;F:\apache-activemq-5.14.4\bin\wrapper.jar;
2.遇见的ERROR分析
<1>错误: 找不到或无法加载主类 org.tanukisoftware.wrapper.WrapperSimpleApp
解决办法:不要添加ACTIVEMQ_HOME 这个环境变量;
<2>错误:javax.naming.NameNotFoundException TopicCF
解决办法:jndi.properties文件要放在如下路径
别名为topic1 的jms的主题必须在如下图的broker节点下
3.在cmd如何运行
首先你需要运行activemq.bat
在项目路径下运行cmd窗口输入如下命令,同时在两个cmd中输入java命令,将会看到文章最后的效果
这是实现的代码类
package com.yqq.test; import java.io.BufferedReader; import java.io.InputStreamReader; import java.nio.file.attribute.UserPrincipalNotFoundException; import java.util.Properties; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.Session; import javax.jms.TextMessage; import javax.jms.Topic; import javax.jms.TopicConnection; import javax.jms.TopicConnectionFactory; import javax.jms.TopicPublisher; import javax.jms.TopicSession; import javax.jms.TopicSubscriber; import javax.naming.Context; import javax.naming.InitialContext; public class Chat implements javax.jms.MessageListener{ private TopicSession pubSession; private TopicPublisher publisher; private TopicConnection connection; private String username; public Chat(String topicFactory,String topicName,String userName) throws Exception { Properties env = new Properties(); env.put(Context.SECURITY_PRINCIPAL, "system"); env.put(Context.SECURITY_CREDENTIALS, "manager"); env.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory"); env.put(Context.PROVIDER_URL, "tcp://localhost:61616"); //使用jndi.properties文件获得一个JNDI连接 InitialContext ctx = new InitialContext(env); //查找JMS连接工厂并创建连接 TopicConnectionFactory conFactory = (TopicConnectionFactory) ctx.lookup(topicFactory); TopicConnection connection = conFactory.createTopicConnection(); //创建两个JMS会话 TopicSession pubSession = connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE); TopicSession subSession = connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE); //查找一个JMS主题 Topic chatTopic = (Topic) ctx.lookup(topicName); //创建一个JMS发布者和订阅者。 //createSubscriber中附加的参数是一个消息选择器(null)和noLocal标记的一个真值, //它表明这个发布者生产的消息不应被它自己所消费 TopicPublisher publisher = pubSession.createPublisher(chatTopic); TopicSubscriber subscriber = subSession.createSubscriber(chatTopic, null,true); //设置一个JMS消息侦听器 subscriber.setMessageListener(this); //初始化Chat应用程序变量 this.connection = connection; this.pubSession = pubSession 4000 ; this.publisher = publisher; this.username = userName; //启动JMS连接;允许传送消息 connection.start(); } /** * 接收来自TopicSubscriber的消息 */ @Override public void onMessage(Message arg0) { TextMessage textMessage = (TextMessage) arg0; try { System.out.println(textMessage.getText()); } catch (JMSException e) { e.printStackTrace(); } } /* * 使用发布者创建并发送消息 */ protected void writeMessage(String text) throws JMSException{ TextMessage message = pubSession.createTextMessage(); message.setText(username + ": " + text); publisher.publish(message); } /* * 关闭JMS连接 */ public void close()throws JMSException { connection.close(); } public static void main(String[] args) { try { if(args.length!=3) System.out.println("Factory,Topic,or username Missing!"); Chat chat = new Chat(args[0], args[1], args[2]); //从命令行读取 BufferedReader commandLine = new BufferedReader(new InputStreamReader(System.in)); //循环,直到键入 "exit" 为止 while(true){ String s = commandLine.readLine(); if (s.equalsIgnoreCase("exit")) { chat.close(); System.exit(0); } else chat.writeMessage(s); } } catch (Exception e) { e.printStackTrace(); } } }
这个是实验成功后的图片
相关文章推荐
- 使用websocket的组件socket.io实现最简单的聊天室功能。
- 基于Server-Sent Event的简单聊天室 Web 2.0时代,即时通信已经成为必不可少的网站功能,那实现Web即时通信的机制有哪些呢?在这门项目课中我们将一一介绍。最后我们将会实现一个基于Server-Sent Event和Flask简单的在线聊天室。
- HTML5 WebSocket(Client) + JavaWeb(Server) 实现简单的聊天室功能
- android下的XMPP对应smack-4.2.1,实现登录,注册,发单聊,加聊天室,发群聊等简单功能
- nodejs实现的一个简单聊天室功能分享
- 基于Server-Sent Event的简单聊天室 Web 2.0时代,即时通信已经成为必不可少的网站功能,那实现Web即时通信的机制有哪些呢?在这门项目课中我们将一一介绍。最后我们将会实现一个基于Server-Sent Event和Flask简单的在线聊天室。
- WebSocket jfinal 实现简单的聊天室功能
- HTML5 WebSocket(Client) + JavaWeb(Server) 实现简单的聊天室功能
- 用Websocket实现的最简单的聊天室功能
- java socket编程实现简单聊天室功能 单线程执行
- java web利用mvc结构实现简单聊天室功能
- 【Unity】简单聊天室功能的实现方法教程
- [知了堂学习笔记]网络编程扩展_实现简单的聊天室功能
- 如何用WebSocket实现一个简单的聊天室以及单聊功能
- 网络编程+多线程实现简单的聊天室功能
- java实现一个简单TCPSocket聊天室功能分享
- nodejs实现的一个简单聊天室功能分享
- HTML5 WebSocket(Client) + JavaWeb(Server)实现简单的聊天室功能
- Silverlight使用socket tcp简单实现聊天室功能
- 在写rss阅读实现的blog的聚合,简单的聚合功能,发现的一点问题