ActiveMQ简单入门实例

第一步:下载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);
}
}
}
}



转载于:https://my.oschina.net/u/1183930/blog/638280

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值