一、依赖

<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-client</artifactId>
<version>5.14.4</version>
</dependency>

二、编码

1. P2P模式

/**
*
* @ClassName: Producer
* @Description: 消息生产者
*
*/
public class Producer { private static final String QUEUE_NAME = "activemq_queue"; public static void main(String[] args) throws Exception {
//1.创建一个连接工厂
ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://192.168.2.12:61616");
//2.使用工厂创建Connection
Connection connection = factory.createConnection();
//3.开启连接
connection.start();
//4.创建一个Session
//第一个参数:是否开启事务(一般不开启),如果开启事务,第二个参数无意义
//第二个参数:应答模式(自动/手动)
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//5.通过Session创建一个Destination对象,两种形式:queue、topic
Queue queue = session.createQueue(QUEUE_NAME);
//6.通过Session创建一个Producer对象
MessageProducer producer = session.createProducer(queue);
//7.创建Message对象
// TextMessage message = new ActiveMQTextMessage();
// message.setText("");
TextMessage textMessage = session.createTextMessage("hello world");
//8.发送消息
producer.send(textMessage);
//9.关闭资源
producer.close();
session.close();
connection.close();
} }
/**
*
* @ClassName: Consumer
* @Description: 消息消费者
*
*/
public class Consumer { private static final String QUEUE_NAME = "activemq_queue"; public static void main(String[] args) throws Exception {
// 1.创建一个连接工厂
ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://192.168.2.12:61616");
// 2.使用工厂创建Connection
Connection connection = factory.createConnection();
// 3.开启连接
connection.start();
// 4.创建一个Session
// 第一个参数:是否开启事务(一般不开启),如果开启事务,第二个参数无意义
// 第二个参数:应答模式(自动/手动)
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 5.通过Session创建一个Destination对象,两种形式:queue、topic
Queue queue = session.createQueue(QUEUE_NAME);
// 6.通过Session创建一个Consumer对象
MessageConsumer consumer = session.createConsumer(queue);
// 7.接收消息
consumer.setMessageListener(new MessageListener() { public void onMessage(Message message) {
// 8.处理消息
TextMessage textMessage = (TextMessage)message;
try {
System.out.println(textMessage.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
});
//为了正常测试,此处使用阻塞,使监听器能持续监听消息
System.in.read();
// 9.关闭资源
consumer.close();
session.close();
connection.close();
} }
p2p模式只允许有一个消费方,消息生产方生产消息放入队列后,消费方从队列中获取消息进行消费。
启动消息生产者,生产消息,如图:

启动消息消费者,消费消息,如图:

消息消费后,后台管理信息,如图:

2.publish/subscribe模式

/**
*
* @ClassName: Producer
* @Description: 消息生产方
*
*/
public class Producer { private static final String TOPIC_NAME = "activemq_topic"; public static void main(String[] args) throws Exception {
//1.创建一个连接工厂
ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://192.168.2.12:61616");
//2.使用工厂创建Connection
Connection connection = factory.createConnection();
//3.开启连接
connection.start();
//4.创建一个Session
//第一个参数:是否开启事务(一般不开启),如果开启事务,第二个参数无意义
//第二个参数:应答模式(自动/手动)
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//5.通过Session创建一个Destination对象,两种形式:queue、topic
Topic topic = session.createTopic(TOPIC_NAME);
//6.通过Session创建一个Producer对象
MessageProducer producer = session.createProducer(topic);
//7.创建Message对象
// TextMessage message = new ActiveMQTextMessage();
// message.setText("");
TextMessage textMessage = session.createTextMessage("hello world topic");
//8.发送消息
producer.send(textMessage);
//9.关闭资源
producer.close();
session.close();
connection.close();
}
}
/**
*
* @ClassName: Comsumer1
* @Description: 消息消费方
*
*/
public class Comsumer1 { private static final String TOPIC_NAME = "activemq_topic"; public static void main(String[] args) throws Exception {
// 1.创建一个连接工厂
ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://192.168.2.12:61616");
// 2.使用工厂创建Connection
Connection connection = factory.createConnection();
// 3.开启连接
connection.start();
// 4.创建一个Session
// 第一个参数:是否开启事务(一般不开启),如果开启事务,第二个参数无意义
// 第二个参数:应答模式(自动/手动)
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 5.通过Session创建一个Destination对象,两种形式:queue、topic
Topic topic = session.createTopic(TOPIC_NAME);
// 6.通过Session创建一个Consumer对象
MessageConsumer consumer = session.createConsumer(topic);
// 7.接收消息
consumer.setMessageListener(new MessageListener() { public void onMessage(Message message) {
// 8.处理消息
TextMessage textMessage = (TextMessage)message;
try {
System.out.println(textMessage.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
});
System.out.println("消费者1已经启动");
System.in.read();
// 9.关闭资源
consumer.close();
session.close();
connection.close();
}
}
ps模式启动了2个消费者,Consumer2代码与Comsumer1代码一致,因此在此处省略。
1) 当我们先启动消费生产者,生产消息,再启动消息消费者后,发现,消费者并没有消费消息。
2) 当我们先启动两个消息消费者后,再启动消息生产者,结果如图:





ps模式允许有多个消费方消费同一个主题消息。相当于微信公众号,服务端发送一条消息,订阅该公众号的客户端都能看到该消息,但是不能查看在订阅之前服务端发送的消息。

消息中间件系列之Java API操作ActiveMQ的更多相关文章

  1. Kafka系列三 java API操作

    使用java API操作kafka 1.pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xs ...

  2. hive-通过Java API操作

    通过Java API操作hive,算是测试hive第三种对外接口 测试hive 服务启动 package org.admln.hive; import java.sql.SQLException; i ...

  3. hadoop2-HBase的Java API操作

    Hbase提供了丰富的Java API,以及线程池操作,下面我用线程池来展示一下使用Java API操作Hbase. 项目结构如下: 我使用的Hbase的版本是 hbase-0.98.9-hadoop ...

  4. 使用Java API操作HDFS文件系统

    使用Junit封装HFDS import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.*; import org ...

  5. Hadoop之HDFS(三)HDFS的JAVA API操作

    HDFS的JAVA API操作 HDFS 在生产应用中主要是客户端的开发,其核心步骤是从 HDFS 提供的 api中构造一个 HDFS 的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS ...

  6. MongoDB Java API操作很全的整理

    MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写,一般生产上建议以共享分片的形式来部署. 但是MongoDB官方也提供了其它语言的客户端操作API.如下图所示: 提供了C.C++ ...

  7. zookeeper的java api操作

    zookeeper的java api操作 创建会话: Zookeeper(String connectString,int sessionTimeout,Watcher watcher) Zookee ...

  8. java api操作

    java api操作 导入开发包 将hbase安装包中lib下包导入java项目   创建表   Configuration conf = HBaseConfiguration.create(); c ...

  9. HDFS 05 - HDFS 常用的 Java API 操作

    目录 0 - 配置 Hadoop 环境(Windows系统) 1 - 导入 Maven 依赖 2 - 常用类介绍 3 - 常见 API 操作 3.1 获取文件系统(重要) 3.2 创建目录.写入文件 ...

随机推荐

  1. OGG_GoldenGate检查点应用Checkpoint(案例)

    2014-03-06 Created By BaoXinjian

  2. Spark1.4.1 编译与安装

    1.下载下载地址:http://spark.apache.org/downloads.html 选择下载源码 2.源码编译1)解压tar -zxvf spark-1.4.1.tgz2.编译spark有 ...

  3. php教程之php空白页的原因及解决方法

    php中出现空白页的原因及解决方法汇总. 很多程序员在进行php开发的时候都遇到过出现空白页的请,综合分析来说,在php编程中出现空白页面可能是由以下几个原因造成的: 1.逻辑错误逻辑错误是最难排除的 ...

  4. NGUI UIPanel绘制原理学习

    NGUI底层绘制都是调用UIDrawCall来完成的,它会动态实例化出材质球,改变UV偏移和缩放(图集显示).并且全部是面片 UIPanel也是面片,但是内部物体遮罩比较特殊,经过查找发现,影响UIP ...

  5. 把UIView转成UIImage,解决模糊失真问题

    近期工作中,遇到一个需求,须要把一个UIView对象转成UIImage对象显示.经过网络搜索.找到例如以下答案: ? 1 2 3 4 5 6 7 8 -(UIImage*)convertViewToI ...

  6. ubuntu 清理系统垃圾与备份

    虽然linux下不会有windows下的那么多垃圾和磁盘碎片!但还是会留下一些用不着的临时文件或是多次升级后的N个旧的内核! 1,非常有用的清理命令:sudo apt-get autocleansud ...

  7. cocos2d-x分别在Visual Studio和eclipse中设置启用Box2D

    cocos2d-x内嵌有chipmunk和Box2D两个物理库,默认启用的是chipmunk.如果想使用Box2D,可做如下设置.PS:本人所用的版本是cocos2d-x-2.2.5. 一.在Visu ...

  8. 优雅得使用composer来安装各种PHP小工具

    Composer对php世界的影响是巨大的,使用composer来代替PEAR一定是大势所趋.当小伙伴们都还沉浸在composer带来的便利的时候,有没有想过如何更好的使用composer呢,网上大部 ...

  9. python——内置函数和lambda匿名函数

    内置函数 接下来,我们就一起来看看python里的内置函数.截止到python版本3.6.2,现在python一共为我们提供了68个内置函数.它们就是python提供给你直接可以拿来使用的所有函数.这 ...

  10. C++基础学习-20120515

    1---------带参数的构造函数B (int i) : data(i);//data=i冒号后面是成员变量初始化列表member initialization list 2-----------拷 ...