ActiveMQ 部署及发送接收消息.docx
《ActiveMQ 部署及发送接收消息.docx》由会员分享,可在线阅读,更多相关《ActiveMQ 部署及发送接收消息.docx(11页珍藏版)》请在冰豆网上搜索。
ActiveMQ部署及发送接收消息
ActiveMQ部署及发送接收消息
迷蝶
一、下载
下载地址:
http:
//activemq.apache.org/我这里使用的版本为当前最新5.8.0。
下载版本有Windows和Linux两个版本,且都分为32位和64位。
根据自己需要选择下载。
二、安装
我这里下载的为windows的32位版本(apache-activemq-5.8.0-bin.zip),下载后直接解压到需要安装的目录或在直接解压到当前目录也可,解压完安装也完成。
解压后目录如上图,里面包含了示例和文档,及所有的jar包。
三、运行
进入到bin目录(apache-activemq-5.8.0\bin),双击activemq.bat,就会运行,运行截图如下:
此时表示ActiveMQ已经在运行了,当然正常生产环境下可以设置作为服务在后台运行,并且随系统启动而启动。
四、测试
ActiveMQ自带了一套管理系统,访问http:
//localhost:
8161/admin/,会出现需要输入用户名和密码的页面如下:
默认用户名和密码都是admin,进入后则为主界面:
在这个界面上,我们可以管理队列及其他的一些功能,为了下面的继续,我们在这里创建一个Queue和一个Topic(Queue和Topic的区别见附件一)。
点击目录上的Queues进入创建Queue页面,输入Queue名称,点击Create后下面就创建了G2Queue的queue队列。
这里也可以不用这样手工创建,在发送端指定了一个Queue或Topic名字后,会自动创建一个队列,如上面的choice.queue和FirstQueue都是我测试程序时,程序里面指定的Queue名称,自动创建的。
同样的方式创建一个Topic,如下:
五、发送消息
创建一个新的项目,我这里是创建的webproject名称为ActiveMQ,引入ActiveMQ的jar包,整个工程结构如下:
此段代码从网上直接copy,只是稍作修改:
importjava.util.Random;
importjavax.jms.Connection;
importjavax.jms.ConnectionFactory;
importjavax.jms.DeliveryMode;
importjavax.jms.Destination;
importjavax.jms.JMSException;
importjavax.jms.MessageProducer;
importjavax.jms.Session;
importjavax.jms.TextMessage;
importorg.apache.activemq.ActiveMQConnectionFactory;
publicclassSendMessage{
privatestaticfinalStringurl="tcp:
//localhost:
61616";
privatestaticfinalStringQUEUE_NAME="G2Queue";
publicvoidsendMessage()throwsJMSException{
//JMS客户端到JMSProvider的连接
Connectionconnection=null;
try{
//连接工厂,JMS用它创建连接
//构造ConnectionFactory实例对象,此处采用ActiveMq的实现jar
ConnectionFactoryconnectionFactory=newActiveMQConnectionFactory(url);
connection=(Connection)connectionFactory.createConnection();
//启动连接
connection.start();
//Session:
发送或接收消息的线程
//获取session
Sessionsession=(Session)connection.createSession(false,
Session.AUTO_ACKNOWLEDGE);
//消息的目的地,消息发送到那个队列
Destinationdestination=session.createQueue(QUEUE_NAME);
//MessageProducer:
消息发送者(生产者)
//创建消息发送者
MessageProducerproducer=session.createProducer(destination);
//设置是否持久化
//DeliveryMode.NON_PERSISTENT:
不持久化
//DeliveryMode.PERSISTENT:
持久化
producer.setDeliveryMode(DeliveryMode.PERSISTENT);
Stringmsg="";
inti=0;
do{
msg="第"+i+"次发送的消息:
"+newRandom();
TextMessagemessage=session.createTextMessage(msg);
Thread.sleep(1000);
//发送消息到目的地方
producer.send(message);
System.out.println("发送消息:
"+msg);
i++;
}while(i<1000);
}catch(Exceptione){
e.printStackTrace();
}
}
publicstaticvoidmain(String[]args){
SendMessagesndMsg=newSendMessage();
try{
sndMsg.sendMessage();
}catch(Exceptionex){
System.out.println(ex.toString());
}
}
}
运行结果如下:
六、接收消息
packagecn.g2room.mq.test;
importjavax.jms.Connection;
importjavax.jms.ConnectionFactory;
importjavax.jms.Destination;
importjavax.jms.JMSException;
importjavax.jms.Message;
importjavax.jms.MessageConsumer;
importjavax.jms.Session;
importjavax.jms.TextMessage;
importorg.apache.activemq.ActiveMQConnectionFactory;
/**
*消息接收类
*
*@createTime:
Apr7,20135:
11:
11PM
*@author:
252909344@">迷蝶
*@version:
0.1
*@lastVersion:
0.1
*@updateTime:
*@updateAuthor:
252909344@">迷蝶
*@changesSum:
*
*/
publicclassReceiveMessage{
privatestaticfinalStringurl="tcp:
//localhost:
61616";
privatestaticfinalStringQUEUE_NAME="G2Queue";
publicvoidreceiveMessage(){
Connectionconnection=null;
try{
try{
ConnectionFactoryconnectionFactory=newActiveMQConnectionFactory(
url);
connection=connectionFactory.createConnection();
}catch(Exceptione){
System.out.println(e.toString());
}
connection.start();
Sessionsession=connection.createSession(false,
Session.AUTO_ACKNOWLEDGE);
Destinationdestination=session.createQueue(QUEUE_NAME);
//消息接收者,也就是消费者
MessageConsumerconsumer=session.createConsumer(destination);
consumeMessagesAndClose(connection,session,consumer);
}catch(Exceptione){
System.out.println(e.toString());
}
}
/**
*接收和关闭消息,如遇到消息内容为close则,关闭连接
*
*@paramconnectionJMS客户端到JMSProvider的连接
*@paramsession发送或接收消息的线程
*@paramconsumer消息接收对象
*@throwsJMSException
*@auther252909344@">迷蝶
*Apr8,201310:
31:
55AM
*/
protectedvoidconsumeMessagesAndClose(Connectionconnection,
Sessionsession,MessageConsumerconsumer)throwsJMSException{
do{
Messagemessage=consumer.receive(1000);
if("close".equals(message)){
consumer.close();
session.close();
connection.close();
}
if(message!
=null){
onMessage(message);
}
}while(true);
}
publicvoidonMessage(Messagemessage){
try{
if(messageinstanceofTextMessage){
TextMessagetxtMsg=(TextMessage)message;
Stringmsg=txtMsg.getText();
System.out.println("Received:
"+msg);
}
}catch(Exceptione){
e.printStackTrace();
}
}
publicstaticvoidmain(Stringargs[]){
ReceiveMessagerm=newReceiveMessage();
rm.receiveMessage();
}
}
运行结果如下: