ActiveMQ简单入门实例
2014-05-20 16:52
302 查看
第一步:下载ActiveMQ 官网地址:http://activemq.apache.org/ ;将下载好的压缩包解压出来。E:\study\apache-activemq-5.9.1\bin下面有个activemq.bat执行脚本直接启动mq(需要安装JDK并且配置环境变量)。(此处路径是我的路径)
第二步:创建一个普通的java项目。将E:\study\apache-activemq-5.9.1下面的activemq-all-5.9.1.jar包拷贝到项目中。
第三步:编写一个简单的客户端聊天程序
Chat.java
package org.walden.chp02;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
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.NamingException;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQTopic;
public class Chat implements MessageListener{
private TopicSession pubSession;
private TopicPublisher publisher;
private TopicConnection connection;
private String username;
/**
* 初始化构造函数
* 创建一个新的实例 Chat.
*
* @param username
* @throws NamingException
* @throws JMSException
*/
public Chat(String username) throws NamingException, JMSException{
//创建一个JMS连接工厂。并创建JMS连接
TopicConnectionFactory factory = new ActiveMQConnectionFactory(ActiveMQConnectionFactory.DEFAULT_USER, ActiveMQConnectionFactory.DEFAULT_PASSWORD, "tcp://localhost:61616");
TopicConnection connection = factory.createTopicConnection();
//创建两个JMS会话对象
TopicSession pubSession = connection.createTopicSession(false, TopicSession.AUTO_ACKNOWLEDGE);
TopicSession subSession = connection.createTopicSession(false, TopicSession.AUTO_ACKNOWLEDGE);
//创建一个JMS主题
Topic chatTopic = new ActiveMQTopic("topic");//主题名字随便写
//创建一个JMS订阅者与发布者.createPublisher附带的参数是一个消息
TopicPublisher publisher = pubSession.createPublisher(chatTopic);
//选择器null和nolocal标识一个真值,它表示这个发布者生成的消息不应该被它自己消费
TopicSubscriber subscriber = subSession.createSubscriber(chatTopic/*, null, true*/);
//设置一个JMS消息侦听器
subscriber.setMessageListener(this);
//初始化Chat变量
this.connection = connection;
this.pubSession = pubSession;
this.username = username;
this.publisher = publisher;
//启用JMS连接,允许发送消息
this.connection.start();
}
/**
* 接收来自TopicSubScriber的消息
*/
@Override
public void onMessage(Message message) {
try {
TextMessage textMessage = (TextMessage) message;
System.out.println(textMessage.getText());
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 使用发布者发送消息
* writeMessage(这里用一句话描述这个方法的作用)
*/
public void writeMessage(String text) throws JMSException{
TextMessage textMessage = pubSession.createTextMessage();
textMessage.setText(username+":"+text);
publisher.publish(textMessage);
}
/**
* 关闭聊天程序
*/
public void closeChat() throws JMSException{
connection.close();
}
}
第五步:编写测试类
package org.walden.chp02;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import javax.jms.JMSException;
import javax.naming.NamingException;
public class TestChat1 {
public static void main(String[] args) throws IOException, NamingException,
JMSException {
Chat chat = new Chat(TestChat1.class.getName());
BufferedReader reader = new BufferedReader(new InputStreamReader(
System.in));
while (true) {
String text ="chat1:"+ reader.readLine();
if (text.endsWith("exit")) {
chat.closeChat();
System.exit(0);
} else {
chat.writeMessage(text);
}
}
}
}
package org.walden.chp02;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import javax.jms.JMSException;
import javax.naming.NamingException;
public class TestChat2 {
public static void main(String[] args) throws NamingException, JMSException, IOException {
Chat chat = new Chat(TestChat2.class.getName());
BufferedReader reader = new BufferedReader(new InputStreamReader(
System.in));
while (true) {
String text ="chat2:"+ reader.readLine();
if (text.endsWith("exit")) {
chat.closeChat();
System.exit(0);
} else {
chat.writeMessage(text);
}
}
}
}
第二步:创建一个普通的java项目。将E:\study\apache-activemq-5.9.1下面的activemq-all-5.9.1.jar包拷贝到项目中。
第三步:编写一个简单的客户端聊天程序
Chat.java
package org.walden.chp02;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
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.NamingException;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQTopic;
public class Chat implements MessageListener{
private TopicSession pubSession;
private TopicPublisher publisher;
private TopicConnection connection;
private String username;
/**
* 初始化构造函数
* 创建一个新的实例 Chat.
*
* @param username
* @throws NamingException
* @throws JMSException
*/
public Chat(String username) throws NamingException, JMSException{
//创建一个JMS连接工厂。并创建JMS连接
TopicConnectionFactory factory = new ActiveMQConnectionFactory(ActiveMQConnectionFactory.DEFAULT_USER, ActiveMQConnectionFactory.DEFAULT_PASSWORD, "tcp://localhost:61616");
TopicConnection connection = factory.createTopicConnection();
//创建两个JMS会话对象
TopicSession pubSession = connection.createTopicSession(false, TopicSession.AUTO_ACKNOWLEDGE);
TopicSession subSession = connection.createTopicSession(false, TopicSession.AUTO_ACKNOWLEDGE);
//创建一个JMS主题
Topic chatTopic = new ActiveMQTopic("topic");//主题名字随便写
//创建一个JMS订阅者与发布者.createPublisher附带的参数是一个消息
TopicPublisher publisher = pubSession.createPublisher(chatTopic);
//选择器null和nolocal标识一个真值,它表示这个发布者生成的消息不应该被它自己消费
TopicSubscriber subscriber = subSession.createSubscriber(chatTopic/*, null, true*/);
//设置一个JMS消息侦听器
subscriber.setMessageListener(this);
//初始化Chat变量
this.connection = connection;
this.pubSession = pubSession;
this.username = username;
this.publisher = publisher;
//启用JMS连接,允许发送消息
this.connection.start();
}
/**
* 接收来自TopicSubScriber的消息
*/
@Override
public void onMessage(Message message) {
try {
TextMessage textMessage = (TextMessage) message;
System.out.println(textMessage.getText());
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 使用发布者发送消息
* writeMessage(这里用一句话描述这个方法的作用)
*/
public void writeMessage(String text) throws JMSException{
TextMessage textMessage = pubSession.createTextMessage();
textMessage.setText(username+":"+text);
publisher.publish(textMessage);
}
/**
* 关闭聊天程序
*/
public void closeChat() throws JMSException{
connection.close();
}
}
第五步:编写测试类
package org.walden.chp02;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import javax.jms.JMSException;
import javax.naming.NamingException;
public class TestChat1 {
public static void main(String[] args) throws IOException, NamingException,
JMSException {
Chat chat = new Chat(TestChat1.class.getName());
BufferedReader reader = new BufferedReader(new InputStreamReader(
System.in));
while (true) {
String text ="chat1:"+ reader.readLine();
if (text.endsWith("exit")) {
chat.closeChat();
System.exit(0);
} else {
chat.writeMessage(text);
}
}
}
}
package org.walden.chp02;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import javax.jms.JMSException;
import javax.naming.NamingException;
public class TestChat2 {
public static void main(String[] args) throws NamingException, JMSException, IOException {
Chat chat = new Chat(TestChat2.class.getName());
BufferedReader reader = new BufferedReader(new InputStreamReader(
System.in));
while (true) {
String text ="chat2:"+ reader.readLine();
if (text.endsWith("exit")) {
chat.closeChat();
System.exit(0);
} else {
chat.writeMessage(text);
}
}
}
}
相关文章推荐
- JMS学习(一)入门及activemq简单实例
- ActiveMQ简单入门实例
- struts简单入门实例
- js入门·循环与判断/利用函数的简单实例/使用对象/列举对象属性的名称
- 简洁 DIV+CSS布局入门之二 ( DIV+CSS常用 常用CSS DIV+CSS实例 简单DIV+CSS DIV+CSS布局分析 DIV+CSS流程)
- 最简单的html入门实例
- 简单 简洁 Ajax 实例 入门
- Spring简单入门实例
- 一个简单的linux下网络程序实例-网络编程入门 收藏
- JFreeChart简单介绍及入门实例 - [JAVA编程]
- Ajax+PHP简单基础入门实例教程
- activemq5.2发送和接收BlobMessage简单实例
- WinForm调用WebService简单实例详解【新手入门】
- 第四课 JBPM简单实例入门
- ActiveMQ入门实例
- 简洁 DIV+CSS布局入门之一 ( DIV+CSS常用 常用CSS DIV+CSS实例 简单DIV+CSS DIV+CSS布局分析 DIV+CSS流程)
- 一个简单的linux下网络程序实例-网络编程入门
- Struts2简单配置与入门实例
- js实例入门(简单展开或关闭)
- 简洁 DIV+CSS布局入门之四 ( DIV+CSS常用 常用CSS DIV+CSS实例 简单DIV+CSS DIV+CSS布局分析 DIV+CSS流程)