最近由于公司项目需要,开始学习JMS,用的是ActiveMQ 。由于这方面 网上的例子不是很多,而且有的也不完整。于是经过几天的摸索学习,写了一个简单的小例子,现在贴出来与大家分享。
ProducerTool.java 用于发送消息:
java 代码
- package homework;
- import javax.jms.Connection;
- import javax.jms.DeliveryMode;
- import javax.jms.Destination;
- import javax.jms.JMSException;
- import javax.jms.MessageProducer;
- import javax.jms.Session;
- import javax.jms.TextMessage;
- import org.apache.activemq .ActiveMQ Connection;
- import org.apache.activemq .ActiveMQ ConnectionFactory;
- public class ProducerTool{
- private Stringuser=ActiveMQ Connection.DEFAULT_USER;
- private Stringpassword=ActiveMQ Connection.DEFAULT_PASSWORD;
- private Stringurl=ActiveMQ Connection.DEFAULT_BROKER_URL;
- private Stringsubject= "TOOL.DEFAULT" ;
- private Destinationdestination= null ;
- private Connectionconnection= null ;
- private Sessionsession= null ;
- private MessageProducerproducer= null ;
- //初始化
- private void initialize() throws JMSException,Exception{
- ActiveMQ ConnectionFactoryconnectionFactory= new ActiveMQ ConnectionFactory(
- user,password,url);
- connection=connectionFactory.createConnection();
- session=connection.createSession( false ,Session.AUTO_ACKNOWLEDGE);
- destination=session.createQueue(subject);
- producer=session.createProducer(destination);
- producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
- }
- //发送消息
- public void produceMessage(Stringmessage) throws JMSException,Exception{
- initialize();
- TextMessagemsg=session.createTextMessage(message);
- connection.start();
- System.out.println( "Producer:->Sendingmessage:" +message);
- producer.send(msg);
- System.out.println( "Producer:->Messagesentcomplete!" );
- }
- //关闭连接
- public void close() throws JMSException{
- System.out.println( "Producer:->Closingconnection" );
- if (producer!= null )
- producer.close();
- if (session!= null )
- session.close();
- if (connection!= null )
- connection.close();
- }
- }
ConsumerTool.java用于接受消息,我用的是基于消息监听的机制,需要实现MessageListener接口,这个接口有个 onMessage方法,当接受到消息的时候会自动调用这个函数对消息进行处理。
java 代码
- package homework;
- import javax.jms.Connection;
- import javax.jms.Destination;
- import javax.jms.JMSException;
- import javax.jms.MessageConsumer;
- import javax.jms.Session;
- import javax.jms.MessageListener;
- import javax.jms.Message;
- import javax.jms.TextMessage;
- import org.apache.activemq .ActiveMQ Connection;
- import org.apache.activemq .ActiveMQ ConnectionFactory;
- public class ConsumerTool implements MessageListener{
- private Stringuser=ActiveMQ Connection.DEFAULT_USER;
- private Stringpassword=ActiveMQ Connection.DEFAULT_PASSWORD;
- private Stringurl=ActiveMQ Connection.DEFAULT_BROKER_URL;
- private Stringsubject= "TOOL.DEFAULT" ;
- private Destinationdestination= null ;
- private Connectionconnection= null ;
- private Sessionsession= null ;
- private MessageConsumerconsumer= null ;
- //初始化
- private void initialize() throws JMSException,Exception{
- ActiveMQ ConnectionFactoryconnectionFactory= new ActiveMQ ConnectionFactory(
- user,password,url);
- connection=connectionFactory.createConnection();
- session=connection.createSession( false ,Session.AUTO_ACKNOWLEDGE);
- destination=session.createQueue(subject);
- consumer=session.createConsumer(destination);
- }
- //消费消息
- public void consumeMessage() throws JMSException,Exception{
- initialize();
- connection.start();
- System.out.println( "Consumer:->Beginlistening..." );
- //开始监听
- consumer.setMessageListener( this );
- //Messagemessage=consumer.receive();
- }
- //关闭连接
- public void close() throws JMSException{
- System.out.println( "Consumer:->Closingconnection" );
- if (consumer!= null )
- consumer.close();
- if (session!= null )
- session.close();
- if (connection!= null )
- connection.close();
- }
- //消息处理函数
- public void onMessage(Messagemessage){
- try {
- if (message instanceof TextMessage){
- TextMessagetxtMsg=(TextMessage)message;
- Stringmsg=txtMsg.getText();
- System.out.println( "Consumer:->Received:" +msg);
- } else {
- System.out.println( "Consumer:->Received:" +message);
- }
- } catch (JMSExceptione){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- }
- }
- }
如果想主动的去接受消息,而不用消息监听的话,把consumer.setMessageListener(this)改为Message message = consumer.receive(),手动去调用MessageConsumer的receive方法即可。
下面是测试类Test.java:
java 代码
- package homework;
- import javax.jms.JMSException;
- public class Test{
- /**
- *@paramargs
- */
- public static void main(String[]args) throws JMSException,Exception{
- //TODOAuto-generatedmethodstub
- ConsumerToolconsumer= new ConsumerTool();
- ProducerToolproducer= new ProducerTool();
- //开始监听
- consumer.consumeMessage();
- //延时500毫秒之后发送消息
- Thread.sleep( 500 );
- producer.produceMessage( "Hello,world!" );
- producer.close();
- //延时500毫秒之后停止接受消息
- Thread.sleep( 500 );
- consumer.close();
- }
- }
以上就是我学习ActiveMQ 之后写的一个简单的例子,希望对你有帮助,如果有什么错误还请指正。