一般步骤:

  1. 请求一个JMS连接工i厂。
  2. 是用连接工厂创建连接。
  3. 启动JMS连接。
  4. 通过连接创建session。
  5. 获取一个目标。
  6. 创建一个生产者,或a.创建一个生产者,b.创建一条JMS消息并发送到目标
  7. 创建一个消费者,或a.创建一个消费者,b.注册一个消息监听器。
  8. 发送或接受消息。
  9. 关闭所有资源(连接,会话,生产者,消费者等)。

首先登陆至ActiveMQ后台创建一个队列为TestQueue:

..省略

创建生产者:

  1. package com.thunisoft.jms.mine;
  2.  
  3. import java.util.HashMap;
  4.  
  5. import javax.jms.Connection;
  6. import javax.jms.ConnectionFactory;
  7. import javax.jms.DeliveryMode;
  8. import javax.jms.Destination;
  9. import javax.jms.MessageProducer;
  10. import javax.jms.ObjectMessage;
  11. import javax.jms.Session;
  12.  
  13. import org.apache.activemq.ActiveMQConnection;
  14. import org.apache.activemq.ActiveMQConnectionFactory;
  15.  
  16. /**
  17. * JMS生产者
  18. *
  19. * @author zhangxsh
  20. *
  21. */
  22. public class Producer {
  23.  
  24. /**
  25. * @param args
  26. */
  27. public static void main(String[] args) {
  28. ConnectionFactory connectionFactory;
  29. Connection connection = null;
  30. Session session;
  31. Destination destination;
  32. MessageProducer producer;
  33. connectionFactory = new ActiveMQConnectionFactory(
  34. ActiveMQConnection.DEFAULT_USER,
  35. ActiveMQConnection.DEFAULT_PASSWORD, "tcp://localhost:61616");
  36. try {
  37. // 通过连接工厂创建连接
  38. connection = connectionFactory.createConnection();
  39. // 启动连接
  40. connection.start();
  41. // 通过连接打开一个会话
  42. session = connection.createSession(Boolean.TRUE,
  43. Session.AUTO_ACKNOWLEDGE);
  44. // 根据特定的队列名称创建一个目标地
  45. destination = session.createQueue("TestQueue");
  46. // 根据目标地创建一个生产者
  47. producer = session.createProducer(destination);
  48. // 不需要持久化的投递模式
  49. producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
  50. for (int i = 1; i <= 10; i++) {
  51. ObjectMessage message = session.createObjectMessage();
  52. HashMap m = new HashMap();
  53. m.put("key" + i, i);
  54. message.setObject(m);
  55. // 发送消息到目的地方
  56. System.out.println("发送消息:" + "ActiveMq 发送的消息" + i);
  57. producer.send(message);
  58. }
  59. session.commit();
  60. } catch (Exception e) {
  61. e.printStackTrace();
  62. } finally {
  63. try {
  64. if (null != connection)
  65. connection.close();
  66. } catch (Throwable ignore) {
  67. }
  68. }
  69. }
  70. }

消费者:

  1. package com.thunisoft.jms.mine;
  2.  
  3. import javax.jms.Connection;
  4. import javax.jms.ConnectionFactory;
  5. import javax.jms.Destination;
  6. import javax.jms.MessageConsumer;
  7. import javax.jms.ObjectMessage;
  8. import javax.jms.Session;
  9.  
  10. import org.apache.activemq.ActiveMQConnection;
  11. import org.apache.activemq.ActiveMQConnectionFactory;
  12.  
  13. /**
  14. * JMS消费者
  15. *
  16. * @author zhangxsh
  17. *
  18. */
  19. public class Consumer {
  20.  
  21. /**
  22. * @param args
  23. */
  24. public static void main(String[] args) {
  25. ConnectionFactory connectionFactory;
  26. Connection connection = null;
  27. Session session;
  28. Destination destination;
  29. MessageConsumer consumer;
  30. connectionFactory = new ActiveMQConnectionFactory(
  31. ActiveMQConnection.DEFAULT_USER,
  32. ActiveMQConnection.DEFAULT_PASSWORD, "tcp://localhost:61616");
  33. try {
  34. connection = connectionFactory.createConnection();
  35. connection.start();
  36. session = connection.createSession(Boolean.FALSE,
  37. Session.AUTO_ACKNOWLEDGE);
  38. destination = session.createQueue("TestQueue");
  39. consumer = session.createConsumer(destination);
  40. while (true) {
  41. ObjectMessage message = (ObjectMessage) consumer
  42. .receive(100000);
  43. if (null != message) {
  44. System.out.println("收到消息" + message.getObject());
  45. } else {
  46. break;
  47. }
  48. }
  49. } catch (Exception e) {
  50. e.printStackTrace();
  51. } finally {
  52. try {
  53. if (null != connection)
  54. connection.close();
  55. } catch (Throwable ignore) {
  56. }
  57. }
  58.  
  59. }
  60.  
  61. }

【原创】JMS生产者和消费者【PTP同步接收消息】的更多相关文章

  1. 【原创】JMS生产者和消费者【PTP异步接收消息】

    PTP模式下,异步接收消息需要定义一个MessageListener来监听,当生产者有消息要发送时会主动通知Listener去处理该消息,会调用监听的onMessage方法去处理. 首先看生产者(和同 ...

  2. 【原创】JMS发布者订阅者【异步接收消息】

    发布订阅模式和PTP方式不同之处为后者依赖于一个Topic话题: package com.thunisoft.jms.mine.topic; import java.util.HashMap; imp ...

  3. Java 线程的通讯--生产者和消费者

    package 生产者和消费者; //消费者 public class Customer implements Runnable { private Share_resources rescource ...

  4. java多线程(同步与死锁问题,生产者与消费者问题)

    首先我们来看同步与死锁问题: 所谓死锁,就是A拥有banana.B拥有apple. A对B说:你把apple给我.我就把banana给你. B对A说:你把banana给我,我就把apple给你. 可是 ...

  5. java多线程(同步和死锁,生产者和消费者问题)

    首先我们来看看同步与死锁: 所谓死锁.这是A有banana,B有apple. A至B说:你把apple对我来说,,我会banana给你. B至A说:你把banana对我来说,,我会apple给你. 可 ...

  6. 使用Win32 API实现生产者消费者线程同步

    使用win32 API创建线程,创建信号量用于线程的同步 创建信号量 语法例如以下 HANDLE semophore; semophore = CreateSemaphore(lpSemaphoreA ...

  7. 同步锁Lock & 生产者和消费者案例

    显示锁 Lock ①在 Java 5.0 之前,协调共享对象的访问时可以使用的机 制只有 synchronized 和 volatile . Java 5.0 后增加了一些 新的机制,但并不是一种替代 ...

  8. JAVA笔记14__多线程共享数据(同步)/ 线程死锁 / 生产者与消费者应用案例 / 线程池

    /** * 多线程共享数据 * 线程同步:多个线程在同一个时间段只能有一个线程执行其指定代码,其他线程要等待此线程完成之后才可以继续执行. * 多线程共享数据的安全问题,使用同步解决. * 线程同步两 ...

  9. [原创]如何编写多个阻塞队列连接下的多生产者多消费者的Python程序

    平常在写程序时,往往会遇到一个需求:在程序的多个阶段都会出现阻塞的可能,因此,这多个阶段就需要并发执行. Python的多线程有一个特点,就是不允许从外部结束一个运行中的线程,这给我们编写代码时带来了 ...

随机推荐

  1. TextView 限制最大行数、最小行数、字数超过“...”表示

    最小行数: android:minLines = "2" //最小行数为2 最大行数: android:maxLines = "2" //最大行数为2 文字超过 ...

  2. Pyhton学习——Day8

    ###########################################max函数#################################################### ...

  3. sklearn学习7-----决策树(tree)

    1.使用示例 2.树模型参数:[很多参数都是用来限制树过于庞大,即担心其过拟合] #  1.criterion  gini  or  entropy:用什么作为衡量标准 ( 熵值或者Gini系数 ). ...

  4. 再识Quartz

    在之前的项目中使用过Quartz,但都是基于XML配置定义任务的.目前一个项目应用需要对任务进行创建.暂停.删除等动态管理.所以再次在网上翻了翻,再来好好重新认识下Quartz. 名词解释: sche ...

  5. Spring IoC容器实现

    1,Spring的两种IoC容器 BeanFactory 基础类型的IoC容器: 采用延迟初始化策略(容器初始化完成后并不会创建bean的对象,只有当收到初始化请求时才进行初始化): 由于延迟初始化, ...

  6. org.apache.hadoop.ipc.Client: Retrying connect to server

    这个问题导致jps查看结点进程时发现找不到NodeManager或一段时间后消失,网上查找了很多博客,因hadoop版本不一样且出错的原因也可能不同,所以找了老半天. 步骤:jps --> 看l ...

  7. Html 播放 mp4格式视频提示 没有发现支持的视频格式和mime类型

    转自原文 Html 播放 mp4格式视频提示 没有发现支持的视频格式和mime类型 播放mp4格式的时候提示 Html 播放 mp4格式视频提示 没有发现支持的视频格式和mime类型 原因是在IIS中 ...

  8. volatile 和 mutable 关键字

    经常接触,但是过一段时间可能又忘了.做个记录. volatile是表示变量易变,不要放缓存,每次实际取,尤其是多线程. mutable表示一个const 类或者数据结构里面,某个字段是可以改变的.

  9. spring web mvc第一天

    spring  web mvc 感觉就是高大上啊!啥都是配置文件就能够了.所以第一步就是弄清楚配置文件使用和总体框架的流程! Spring web mvc最重要的当然是Controller,也就是首先 ...

  10. 【跟我一步一步学Struts2】——拦截器

    前言 前面提到过拦截器.而且说拦截器仅仅能拦截Action.这里拦截器的调用体现了责任链模式.为什么说体现了责任链模式呢? 以下的一段话说的非常明确: Struts2将整个运行划分成若干同样类型的元素 ...