import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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.InitialContext;
import javax.naming.NamingException;
public class Chat implements MessageListener{
private TopicSession pubSession;
private TopicPublisher publisher;
private TopicConnection connection;
private String username;
public Chat(String topicFactory,String topicName,String username) throws NamingException, JMSException {
InitialContext ctx = new InitialContext();
TopicConnectionFactory conFactory = (TopicConnectionFactory)ctx.lookup(topicFactory);
TopicConnection connection = conFactory.createTopicConnection();
TopicSession pubSession = connection.createTopicSession(false,Session.AUTO_ACKNOWLEDGE);
TopicSession subSession = connection.createTopicSession(false,Session.AUTO_ACKNOWLEDGE);
//查找一个JMS主题
Topic chatTopic =(Topic)ctx.lookup(topicName);
TopicPublisher publisher = pubSession.createPublisher(chatTopic);
TopicSubscriber subscriber = subSession.createSubscriber(chatTopic,null,true);
subscriber.setMessageListener(this);
this.connection = connection;
this.pubSession = pubSession;
this.publisher = publisher;
this.username = username;
connection.start();
}
@Override
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);
}
public void close()throws JMSException {
connection.close();
}
public static void main(String[] args) {
if (args.length != 3) {
System.out.println("Factory,topic or username missing!");
try {
Chat chat = new Chat(args[0],args[1],args[2]);
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 (NamingException e) {
e.printStackTrace();
} catch (JMSException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
上面这个就是主类:
在工程里需要把jms包加进来,我用的是activeMq5.4 包名-activemq-all-5.4.0.jar
jndi.properties文件内容如下:
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
在提示符下输入:
D:\eclipse\workspace\jms\bin>java Chat TopicCF topic1 TOM -classpath=D:\eclipse\
workspace\jms\lib\activemq-all-5.4.0.jar
打开另一个窗口输入:
D:\eclipse\workspace\jms\bin>java Chat TopicCF topic1 jack -classpath=D:\eclipse\
workspace\jms\lib\activemq-all-5.4.0.jar
但别忘了启动 activeMq bin下的activemq.bat
这时在提示符下输入信息,就会在窗口中看到了
分享到:
相关推荐
Java消息服务(JMS,Java Message Service)是Java平台中用于创建、发送、接收和读取消息的标准API。...通过阅读《Java消息服务(第二版)》并实践书中提供的源码,开发者将能更全面地掌握这一强大的通信机制。
“第二版”说明了这是该教材的更新版本,通常意味着作者根据Java的发展和读者的反馈对第一版的内容进行了修订和增强,增加了新的信息和教学方法,以提供更加完整和及时的学习体验。 “中文完整高清版”表明这本书...
《Java消息服务(第二版)》这本书深入探讨了这一关键的技术,结合源码分析,可以帮助读者更好地理解和应用JMS。 JMS的核心概念包括以下几点: 1. **消息**:消息是数据传输的基本单元,包含要传递的信息。它可以是...
收入了164个完整的、来自实战的Java编程实例,每个例子都有详尽的注释,全新的第二版涵盖了Java v1.3,实现了20个不同的Java API,其中包括Servelt、JSP、XML、Swing和Java2D java 网络高级编程(PDF) 介绍了网络...
总的来说,《Head First Java》第二版是一本全方位的Java入门教程,它不仅教你如何编写Java代码,更重要的是教会你如何思考像一个程序员,理解和解决问题。通过阅读这本书,你将能够掌握Java的基础,为进一步的学习...
《Java实用教程学习指导(第二版)》是由张跃平和耿祥义编著的一本针对Java编程初学者的专业教程。这本书旨在帮助读者快速掌握Java编程语言的核心概念和实际应用,通过实例解析和详细的指导,使得学习过程更为高效。...
5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...
本资源包“Java数据结构和算法(第二版)+源代码+Applets”为学习者提供了一个全面且深入的学习平台,涵盖了理论知识、实践代码以及直观的交互式演示。 首先,让我们详细探讨数据结构这一部分。数据结构是组织和存储...
### Java语言程序设计第二版习题解答知识点解析 #### 面向对象软件开发方法的重要意义 面向对象的软件开发方法是一种重要的编程范式,它强调以对象为核心的设计思路,将现实世界的实体映射到软件中,使得软件设计...
现在,我们来看一个简单的Java输入输出流的例子。假设我们要从一个文本文件"input.txt"读取内容,并将其写入到"output.txt"中: ```java import java.io.*; public class InputOutputStreamExample { public ...
《Java版数据结构与算法分析第二版》是一本深入探讨数据结构和算法的书籍,主要针对使用Java编程语言的学习者。这本书旨在帮助读者理解和掌握如何有效地设计和分析各种数据结构和算法,这对于提升编程能力、优化程序...
本书《Java数据结构与算法(第二版)》显然深入探讨了这些主题,旨在帮助读者提升编程技能和理解复杂问题的解决策略。下面将详细阐述相关知识点。 1. **数据结构**: - **数组**:基础的数据结构,用于存储固定...
第二个例子展示了如何定义一个类 `People`,该类具有 `height` 和 `ear` 两个属性,以及一个 `speak` 方法。在 `main` 方法中,我们创建了一个 `People` 对象,设置了其属性,并调用了 `speak` 方法。 第三个例子...
6. **第二版更新**:相比于第一版,第二版可能包含了新的案例研究、更新的代码示例以及对原有内容的改进,以适应不断发展的技术和编程实践。 7. **学习路径**:适合初学者和有一定基础的开发者阅读,从基础知识开始...
《Java2实用教程》是一本深受Java初学者和开发者欢迎的经典教材,它的第三版更是集成了作者多年的教学和实践经验,全面覆盖了Java编程的核心概念和技术。这个资源包含了该书所有实例代码,对于深入理解和掌握Java...
《Java数据结构和算法中文第二版》这本书深入浅出地介绍了如何在Java环境中理解和应用各种核心数据结构与算法。 首先,数据结构是组织和管理大量数据的方式,它为高效地存储和检索数据提供了基础。书中可能涵盖了...