生产者

package clc.active;

import com.sun.xml.internal.bind.v2.runtime.unmarshaller.XmlVisitor;
import org.apache.activemq.ActiveMQConnectionFactory; import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageProducer;
import javax.jms.Session; /**
* ClassName: TestProducer<br/>
* Description: 发送一个字符串文本到ActiveMQ<br/>
* date: 2019/1/15 10:16 AM<br/>
*
* @author chengluchao
* @since JDK 1.8
*/ public class TestProducer { /**
* 发送消息到ActiveMQ中,具体的消息内容为参数信息
* 开发JMS相关代码过程中,使用的接口类型都是javax.jms包下的类型.
*
* @param datas - 消息内容.
*/
public void sendTextMessage(String datas) {
//连接工厂
ConnectionFactory factory = null;
//连接
Connection connection = null;
//目的地
Destination destination = null;
//会话
Session session = null;
//消息发送者
MessageProducer producer = null;
//消息对象
Message message = null; try {
//创建连接工厂,连接ActiveMq服务的连接工厂
//创建工厂,构造方法有三个参数,分别是用户名,密码,连接地址
//无参构造,有默认的连接地址,本地连接。localhost
// 单参数构造,无验证模式的,没有用户的认证,
// 三个参数的构造,有认证+指定地址。默认端口是61616
factory = new ActiveMQConnectionFactory("guest", "guest", "tcp://2.2.2.4:61616"); //通过工厂,创建连接对象
//创建连接的方法有重载,其中有createConnection(String username, String password);
//可以再创建爱你连接工厂时,只传递连接地址,不传递用户信息。
connection = factory.createConnection();
//建议启动连接,消息的发送者不是必须启动连接。消息的消费者必须启动连接。
//producer在发送消息的时候,会检查是否启动了连接,如果未启动,自动启动。
//如果有特殊的配置,建议配置完毕后再启动连接
connection.start(); //通过连接对象,创建会话对象。
/*
*创建会话的时候,必须传递两个参数,分别代表是否支持事物和如何确认消息处理。
* transacted - 是否支持事物,数据类型是boolean。true-支持,false-不支持
* true - 支持事物,第二个参数对producer默认无效。建议传递的数据是Session.SESSION_TEANSACTED
* false - 不支持事物,常用参数。第二个参数必须传递,且必须有效。
*
* acknowledgeMode - 如何确认消息的处理。使用确认机制实现的。
* AUTO_ACKNOWLEDGE - 自动确认消息。消息的消费者处理后,自动确认。常用.商业开发不推荐。
* CLIENT_ACKNOWLEDGE - 客户端手动确认,消息的消费者处理后,必须手工确认。
* DUPS_OK_ACKNOWLEDGE - 有副本的客户端手动确认。
* 一个消息可以多次处理。
* 可以略低Session的消耗,在可以容忍重复消息时使用(不推荐使用)
*/ session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
//创建目的地,
destination = session.createQueue("first-mq"); //通过会话对象,创建爱你消息的发送者producer
//创建的消息发送者,发送的消息一定到指定的目的地中。
//创建producer的时候可以不指定目的地,在发送消息的时候指定目的地。
producer = session.createProducer(destination);
//创建文本消息对象,作为具体数据内容的载体。
message = session.createTextMessage(datas); //使用producer发送消息到ActiveMQ的目的地,如果消息发送失败,抛出异常
producer.send(message); System.out.println("消息已发送"); } catch (Exception e) {
e.printStackTrace();
} finally {
// 回收资源
//消息发送者
if (producer != null) {
try {
producer.close();
} catch (JMSException jmse) {
jmse.printStackTrace();
}
}
//会话对象
if (session != null) {
try {
session.close();
} catch (JMSException jmse) {
jmse.printStackTrace();
}
}
//连接对象
if (connection != null) {
try {
connection.close();
} catch (JMSException jmse) {
jmse.printStackTrace();
}
}
}
} public static void main(String[] args) {
TestProducer producer = new TestProducer();
producer.sendTextMessage("clccc");
}
}

消费者:

package clc.active;

import org.apache.activemq.ActiveMQConnectionFactory;
import org.testng.annotations.Test; import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage; /**
* ClassName: TestConsumer<br/>
* Description: 消费消息<br/>
* date: 2019/1/15 11:21 AM<br/>
*
* @author chengluchao
* @since JDK 1.8
*/ public class TestConsumer {
/**
* 消费消息
*
* @throws Exception
*/
@Test
public void TestMQConsumerQueue() throws Exception {
//1、创建工厂连接对象,需要制定ip和端口号
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://2.2.2.4:61616");
//2、使用连接工厂创建一个连接对象
Connection connection = connectionFactory.createConnection();
//3、开启连接
connection.start();
//4、使用连接对象创建会话(session)对象
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//指定目的地获取消息
Destination destination = session.createQueue("first-mq"); //6、使用会话对象创建生产者对象
MessageConsumer consumer = session.createConsumer(destination);
//获取队列中的消息,receive方法是一个主动获取消息的订单,执行一次,拉取一个消息
Message message = consumer.receive(); System.out.println(((TextMessage) message).getText()); //、关闭资源
consumer.close();
session.close();
connection.close();
} }

ActiveMQ 入门使用p2p模型-主动消费的更多相关文章

  1. ActiveMQ P2P模型 观察者消费

    生餐者: package clc.active.listener; import org.apache.activemq.ActiveMQConnectionFactory; import org.t ...

  2. ActiveMQ之一--ActiveMQ入门

    MQ的消费-生产者模型的一个典型的代表,一端往消息队列中不断的写入消息,而另一端则可以读取或者订阅队列中的消息.MQ和JMS类似,但不同的是JMS是SUN JAVA消息中间件服务的一个标准和API定义 ...

  3. ActiveMQ入门系列二:入门代码实例(点对点模式)

    在上一篇<ActiveMQ入门系列一:认识并安装ActiveMQ(Windows下)>中,大致介绍了ActiveMQ和一些概念,并下载.安装.启动他,还访问了他的控制台页面. 这篇,就用代 ...

  4. ActiveMQ入门练习

    ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久 ...

  5. jms - activeMQ入门案例

    activeMQ入门案例 叨叨一波,很久没写博客了,最近比较慢,时间抽不出来,这个借口说的很尴尬...我知道作为一名合格的码农就必须养成每天一博客的习惯.希望友友们别像我这样懒,闲话不多时进入今天的主 ...

  6. 深入浅出 JMS(二) - ActiveMQ 入门指南

    深入浅出 JMS(二) - ActiveMQ 入门指南 上篇博文深入浅出 JMS(一) – JMS 基本概念,我们介绍了消息通信的规范JMS,这篇博文介绍一款开源的 JMS 具体实现-- Active ...

  7. ActiveMQ 入门和与 Spring 整合

    ActiveMQ 入门演示 activemq 依赖 <dependency> <groupId>org.apache.activemq</groupId> < ...

  8. ActiveMQ入门系列三:发布/订阅模式

    在上一篇<ActiveMQ入门系列二:入门代码实例(点对点模式)>中提到了ActiveMQ中的两种模式:点对点模式(PTP)和发布/订阅模式(Pub & Sub),详细介绍了点对点 ...

  9. ActiveMQ 入门Nodejs版

    ActiveMQ 入门下载与安装 官方下载地址 解压,运行bin/win[32|64]/activemq[.bat] 启动服务 环境信息 控制台: http://localhost:8161 默认端口 ...

随机推荐

  1. [BZOJ4779] [Usaco2017 Open]Bovine Genomics(hash + 二分)

    传送门 网上的题解: 枚举左端点,二分右端点位置,最后所有左端点的答案取最小值 我的题解... 二分答案,枚举左端点,看看是否有解.. 好像和上面是反的,但是思路没问题 过程用hash判重 #incl ...

  2. 刷题总结——飞扬的小鸟(NOIP2014提高组)

    题目: 题目背景 NOIP2014 提高组 Day1 试题. 题目描述 Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面 ...

  3. Snmp的学习总结——Snmp的基本概念

    摘自:http://www.cnblogs.com/xdp-gacl/p/3978825.html 一.SNMP简单概述 1.1.什么是Snmp SNMP是英文"Simple Network ...

  4. robotframework使用

    下面是ui自动化的使用,关于接口自动化的使用参照此博客:http://blog.csdn.net/wuxiaobingandbob/article/details/50747125 1.使用pytho ...

  5. scrapy框架之comand line tool

    一 Global Command 1 startproject https://docs.scrapy.org/en/latest/topics/commands.html#startproject ...

  6. 从dataset表中获取某一列的所有值方法

    原文发布时间为:2008-07-31 -- 来源于本人的百度文章 [由搬家工具导入] 可以datarow遍历所有行即可,如下:pubauthor这个表中的au_lname的所有值加到listbox上面 ...

  7. iOS APP 架构漫谈[转]

      Mark  一下 很不错的文章   最近看了一些有关server的东西,一些很简单的东西,不外乎是一些文档规范,另外结合最近看的wwdc的一些video,觉得对软件架构(software arch ...

  8. android自定义Activity窗体大小

    先给大家看图吧: 看,是不是很酷呢,呵呵. 这里我说关键的地方,就是自定义Activity的窗体大小. 这个登录框它不是一个Dialog,而是一个Activity. 如何定义,即把Activity的主 ...

  9. vue之条件渲染

    一.v-if v-if指令用于条件的渲染一块内容,当指令的表达式返回true时,内容才会被渲染. <h1 v-if="isshow">要显示么</h1> d ...

  10. AbstractQueuedSynchronizer 队列同步器源码分析

    AbstractQueuedSynchronizer 队列同步器(AQS) 队列同步器 (AQS), 是用来构建锁或其他同步组件的基础框架,它通过使用 int 变量表示同步状态,通过内置的 FIFO ...