- 浏览: 56783 次
- 性别:
- 来自: 上海
文章分类
最新评论
实现这个简单的聊天程序,使用了JMS的开源实现activemq-5.5消息中间件。分为如下几步完成。
第一步:安装activemq
(1)下载解压到E:\open_source\activeMQ\apache-activemq-5.5.0,并在环境变量配置ACTIVEMQ_HOME
(2)因为apache-activemq-5.5.0需要使用slf4j-1.5.11版本的jar包,下载slf4j
第二步:编写相应的代码,如下:
package ch02.chat;
import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Properties; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageListener; 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 MessageListener { private TopicSession pubSession; private TopicPublisher publisher; private TopicConnection connection; private String username; // 用于初始化chat的构造函数 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(); // 查找一个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; this.publisher = publisher; this.username = username; // 启动JMS连接,允许传递消息 connection.start(); } // 接受来自TopicSubscriber的消息 public void onMessage(Message message) { try { TextMessage textMessage = (TextMessage) message; System.out.println(textMessage.getText()); } catch (JMSException jmse) { jmse.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"); } String topicFactory="TopicCF"; String topicName="topic1"; String username="lyb"; Chat chat = new Chat(topicFactory, topicName, username); // 从命令行读取 BufferedReader commandLine = new BufferedReader( new InputStreamReader(System.in)); // 循环 while (true) { String s = commandLine.readLine(); if (s.equalsIgnoreCase("exit")) { chat.close(); System.exit(0); } else { chat.writeMessage(s); } } } catch (Exception e) { e.printStackTrace(); } ; } }
将以上的类复制一份,放在同一个包下面。一份代码作为消息的发布方,一份代码作为消息的订阅方。
整个程序的工程结构组织见下图
第三步、配置jndi文件
java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory
java.naming.provider.url=tcp://localhost\:61616
java.naming.security.principal=system
java.naming.security.credentials=manager
connectionFactoryNames=TopicCF
topic.topic1=jms.topic1
第四步、启动activeMQ,分别运行Chat.java和CopyChat.java,可以在两个程序之间交互信息
发表评论
-
JVM参数以及调优
2011-10-24 23:39 793一、JVM配置参数中文说明: 1、-Xmixed ... -
分布式服务框架之NIO(一)
2011-10-22 23:08 1298NIO在实现分布式服务框架中非阻塞高并发的服务器端功能 ... -
Spring声明线程池配置示例
2011-09-13 14:19 722<bean id="***Ta ... -
HTTPS下载的问题
2011-08-31 17:18 1726遇到一个很恶心的问题,开发以及测试环境是http协议,下 ... -
实现自己的csv文件解析引擎
2011-08-26 14:29 1458前言: 这里仅仅支持Excel文件导出的CSV文件,解 ... -
迷茫了
2011-08-08 23:09 731又迷茫了,感觉没事可做,什么都不想做 实际并不是没事可做,实 ... -
通用的excel报表生成工具类
2011-07-20 20:41 1098下面这个工具类是今天半天的劳动成果。 以后自己也可能用得到。 ... -
正则表达式元字符总结
2011-07-14 23:22 913正则表达式元字符总结如下: 点号(.):任何单字符的通 ... -
多并发情况下日志信息中如何区分不同线程(客户端)调用
2011-07-13 21:57 1355在企业开发中,常常会遇到这样的需求:通过一个唯一标 ... -
windows下perl开发环境搭建
2011-07-09 22:07 68961、下载并安装ActivePerl,貌似不需要额外的配置,一步 ... -
如何让右键菜单出现“命令行在这里”,即cmd here
2011-06-29 00:24 4700要在命令行下跳转到某个嵌套很深的目录下时,使用cd命令等比 ... -
使用JMock简介
2011-06-28 13:36 940一、常用关键字 one ... -
利用数据库锁实现简单的防并发编程
2011-06-22 23:27 1075大约有两类情况: 1、一个程序代码块同一时刻只允许一个 ... -
程序员如何减少BUG
2011-06-21 22:04 2507最近一个项目出了大量的BUG,很是惭愧,有没有可以尽量规避BU ... -
一些常用的正则表达式(项目中经常用到)
2011-06-15 17:11 8104最近做的一个内部系统项目,涉及大量的文本校验,里面用到了一些常 ... -
解析Excel文件转换科学计数法字符串为正常数字
2011-06-14 22:55 5637问题出现的情形是这样的: excel文件中某个字段,既 ... -
js正则表达式去除表单提交字符串前后的空格
2011-06-13 19:31 1433str为表单提交数据。 str=str.replace ... -
debug容器启动类报MMO异常解决办法
2011-06-10 19:58 703类似的,在eclipse的VM arguments中设置参数: ... -
理想的设计特征
2011-06-09 00:57 693其实下面这些是来自于代码大全,觉得讲得实在是精辟无比,想摘抄下 ... -
最近的几点关于编码的心得
2011-05-25 00:35 6471、编写一个类或者新建一个变量的时候,名字问题需要仔细的斟酌斟 ...
相关推荐
JMS实现sub/pub,聊天系统 创建消息的消费者和生产者
JMS实现的 广播 和 信息发送 ,希望对你有用
JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS(JMS
openjms实现jms消息发布于订阅 openjms实现jms消息发布于订阅 openjms实现jms消息发布于订阅 openjms实现jms消息发布于订阅 openjms实现jms消息发布于订阅
JMS简单使用指南.doc 1、OpenJMS 2、iLinkMQ 3、Sun:Java Message Queue
SpringBoot2整合Jms超级简单攻略(基于ActiveMQ).。消息主题(Topic),需要一个固定的主题,例如大家都是在谈论外卖,那主题就是外卖,别人讨论其他的跟你无关。 消息队列(MQ) ,存放或者实现JMS的功能,需要用到队列...
复件 weblogic中配置JMS及其测试程序
JMS入门(一)从简单示例开始 http://blog.csdn.net/lucien_zong/article/details/17204645
目的:通过JMS 实现 IBM MQ的请求应答功能 工作原理:消息生产者发送消息到队列IN1,然后可以异步或者同步等待消费者接收到IN1消息后,生成应答消息,并发布到IN2队列中。生产者通过messageid在IN2队列中进行消息...
简单的实现了jms的发送与接收,实现了异步通讯的功能 是一个与spring相结合的代码实例
用java写的一个精简版的聊天工具 有全面的注释 非常适合学习 麻雀虽小五脏俱全 用最精简的代码诠释最核心的技术 代码150行左右 非常便于学习和修改
这个Demo程序演示了如何使用SpringBoot来构建一个最简单的基于ActiveMQ的JMS程序。
JMS P2P 实例程序 希望给大家版主
JMS OPENJMS的实现例子JMS OPENJMS的实现例子JMS OPENJMS的实现例子JMS OPENJMS的实现例子
Jms做的一些的demo,activeMq实现的,在项目的test目录下,这是一个maven项目额。
activeMq in action 使用activeMq开发JMS的简单讲述,activeMq in action 使用activeMq开发JMS的简单讲述
Classes contained in javax.jms.jar: javax.transaction.xa.XAResource.class javax.jms.BytesMessage.class javax.jms.Message.class javax.jms.JMSException.class javax.jms.Destination.class javax.jms....
一个简单的JMS客户端应用
ActiveMq-JMS简单实例使用tomcat.doc
jms简单demo,activemq集成spring和不集成