ActiveMQ的一个 producertool/customertool示例

最近由于公司项目需要,开始学习JMS,用的是ActiveMQ 。由于这方面 网上的例子不是很多,而且有的也不完整。于是经过几天的摸索学习,写了一个简单的小例子,现在贴出来与大家分享。
ProducerTool.java 用于发送消息:

java 代码
  1. package homework;
  2. import javax.jms.Connection;
  3. import javax.jms.DeliveryMode;
  4. import javax.jms.Destination;
  5. import javax.jms.JMSException;
  6. import javax.jms.MessageProducer;
  7. import javax.jms.Session;
  8. import javax.jms.TextMessage;
  9. import org.apache.activemq .ActiveMQ Connection;
  10. import org.apache.activemq .ActiveMQ ConnectionFactory;
  11. public class ProducerTool{
  12. private Stringuser=ActiveMQ Connection.DEFAULT_USER;
  13. private Stringpassword=ActiveMQ Connection.DEFAULT_PASSWORD;
  14. private Stringurl=ActiveMQ Connection.DEFAULT_BROKER_URL;
  15. private Stringsubject= "TOOL.DEFAULT" ;
  16. private Destinationdestination= null ;
  17. private Connectionconnection= null ;
  18. private Sessionsession= null ;
  19. private MessageProducerproducer= null ;
  20. //初始化
  21. private void initialize() throws JMSException,Exception{
  22. ActiveMQ ConnectionFactoryconnectionFactory= new ActiveMQ ConnectionFactory(
  23. user,password,url);
  24. connection=connectionFactory.createConnection();
  25. session=connection.createSession( false ,Session.AUTO_ACKNOWLEDGE);
  26. destination=session.createQueue(subject);
  27. producer=session.createProducer(destination);
  28. producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
  29. }
  30. //发送消息
  31. public void produceMessage(Stringmessage) throws JMSException,Exception{
  32. initialize();
  33. TextMessagemsg=session.createTextMessage(message);
  34. connection.start();
  35. System.out.println( "Producer:->Sendingmessage:" +message);
  36. producer.send(msg);
  37. System.out.println( "Producer:->Messagesentcomplete!" );
  38. }
  39. //关闭连接
  40. public void close() throws JMSException{
  41. System.out.println( "Producer:->Closingconnection" );
  42. if (producer!= null )
  43. producer.close();
  44. if (session!= null )
  45. session.close();
  46. if (connection!= null )
  47. connection.close();
  48. }
  49. }

ConsumerTool.java用于接受消息,我用的是基于消息监听的机制,需要实现MessageListener接口,这个接口有个 onMessage方法,当接受到消息的时候会自动调用这个函数对消息进行处理。

java 代码
  1. package homework;
  2. import javax.jms.Connection;
  3. import javax.jms.Destination;
  4. import javax.jms.JMSException;
  5. import javax.jms.MessageConsumer;
  6. import javax.jms.Session;
  7. import javax.jms.MessageListener;
  8. import javax.jms.Message;
  9. import javax.jms.TextMessage;
  10. import org.apache.activemq .ActiveMQ Connection;
  11. import org.apache.activemq .ActiveMQ ConnectionFactory;
  12. public class ConsumerTool implements MessageListener{
  13. private Stringuser=ActiveMQ Connection.DEFAULT_USER;
  14. private Stringpassword=ActiveMQ Connection.DEFAULT_PASSWORD;
  15. private Stringurl=ActiveMQ Connection.DEFAULT_BROKER_URL;
  16. private Stringsubject= "TOOL.DEFAULT" ;
  17. private Destinationdestination= null ;
  18. private Connectionconnection= null ;
  19. private Sessionsession= null ;
  20. private MessageConsumerconsumer= null ;
  21. //初始化
  22. private void initialize() throws JMSException,Exception{
  23. ActiveMQ ConnectionFactoryconnectionFactory= new ActiveMQ ConnectionFactory(
  24. user,password,url);
  25. connection=connectionFactory.createConnection();
  26. session=connection.createSession( false ,Session.AUTO_ACKNOWLEDGE);
  27. destination=session.createQueue(subject);
  28. consumer=session.createConsumer(destination);
  29. }
  30. //消费消息
  31. public void consumeMessage() throws JMSException,Exception{
  32. initialize();
  33. connection.start();
  34. System.out.println( "Consumer:->Beginlistening..." );
  35. //开始监听
  36. consumer.setMessageListener( this );
  37. //Messagemessage=consumer.receive();
  38. }
  39. //关闭连接
  40. public void close() throws JMSException{
  41. System.out.println( "Consumer:->Closingconnection" );
  42. if (consumer!= null )
  43. consumer.close();
  44. if (session!= null )
  45. session.close();
  46. if (connection!= null )
  47. connection.close();
  48. }
  49. //消息处理函数
  50. public void onMessage(Messagemessage){
  51. try {
  52. if (message instanceof TextMessage){
  53. TextMessagetxtMsg=(TextMessage)message;
  54. Stringmsg=txtMsg.getText();
  55. System.out.println( "Consumer:->Received:" +msg);
  56. } else {
  57. System.out.println( "Consumer:->Received:" +message);
  58. }
  59. } catch (JMSExceptione){
  60. //TODOAuto-generatedcatchblock
  61. e.printStackTrace();
  62. }
  63. }
  64. }

如果想主动的去接受消息,而不用消息监听的话,把consumer.setMessageListener(this)改为Message message = consumer.receive(),手动去调用MessageConsumer的receive方法即可。

下面是测试类Test.java:

java 代码
  1. package homework;
  2. import javax.jms.JMSException;
  3. public class Test{
  4. /**
  5. *@paramargs
  6. */
  7. public static void main(String[]args) throws JMSException,Exception{
  8. //TODOAuto-generatedmethodstub
  9. ConsumerToolconsumer= new ConsumerTool();
  10. ProducerToolproducer= new ProducerTool();
  11. //开始监听
  12. consumer.consumeMessage();
  13. //延时500毫秒之后发送消息
  14. Thread.sleep( 500 );
  15. producer.produceMessage( "Hello,world!" );
  16. producer.close();
  17. //延时500毫秒之后停止接受消息
  18. Thread.sleep( 500 );
  19. consumer.close();
  20. }
  21. }

以上就是我学习ActiveMQ 之后写的一个简单的例子,希望对你有帮助,如果有什么错误还请指正。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值