ActiveMQ Pub/Sub版的HelloWorld
1. pom.xml
这个和上一篇是一样的:
- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.ygy</groupId>
- <artifactId>activemq</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <packaging>jar</packaging>
- <name>activemq</name>
- <url>http://maven.apache.org</url>
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- </properties>
- <dependencies>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.10</version>
- <scope>test</scope>
- </dependency>
- <!-- activemq,学习中 -->
- <dependency>
- <groupId>org.apache.activemq</groupId>
- <artifactId>activemq-core</artifactId>
- <version>5.7.0</version>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-api</artifactId>
- <version>1.5.6</version>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-log4j12</artifactId>
- <version>1.5.6</version>
- </dependency>
- </dependencies>
- </project>
2. Pub/Sub版的HelloWorld
生产者:
- package org.ygy.mq.lesson01;
- import javax.jms.Connection;
- import javax.jms.ConnectionFactory;
- 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.ActiveMQConnectionFactory;
- import org.ygy.mq.constants.MQConstants;
- public class HelloTopicProducer {
- public void send(String msg) {
- // 生产者的主要流程
- Connection connection = null;
- try {
- // 1.初始化connection工厂,使用默认的URL
- // failover://tcp://localhost:61616
- ConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
- // 2.创建Connection
- connection = connectionFactory.createConnection();
- // 3.打开连接
- connection.start();
- // 4.创建Session,(是否支持事务)
- Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
- // 5.创建消息目标
- Destination destination_send = session.createTopic(MQConstants.DESTINATION_SEND);
- // 6.创建生产者
- MessageProducer producer = session.createProducer(destination_send);
- // 7.配置消息是否持久化
- /*
- * DeliverMode有2种方式:
- *
- * public interface DeliveryMode { static final int NON_PERSISTENT =
- * 1;//不持久化:服务器重启之后,消息销毁
- *
- * static final int PERSISTENT = 2;//持久化:服务器重启之后,该消息仍存在 }
- */
- producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
- // 8.初始化要发送的消息
- TextMessage message = session.createTextMessage(msg);
- // 9.发送消息
- producer.send(message);
- connection.close();
- } catch (JMSException e) {
- e.printStackTrace();
- }
- }
- public static void main(String[] args) {
- new HelloTopicProducer().send("我来试一试发布/订阅...");
- }
- }
消费者:
- package org.ygy.mq.lesson01;
- 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.MessageListener;
- import javax.jms.Session;
- import javax.jms.TextMessage;
- import org.apache.activemq.ActiveMQConnectionFactory;
- import org.ygy.mq.constants.MQConstants;
- public class HelloTopicConsumer implements MessageListener {
- @Override
- public void onMessage(Message message) {
- if (message instanceof TextMessage) {
- TextMessage txtMsg = (TextMessage) message;
- try {
- System.out.println("哈,我接收到了消息:" + txtMsg.getText());
- } catch (JMSException e) {
- e.printStackTrace();
- }
- }
- }
- public void receive() {
- // 消费者的主要流程
- Connection connection = null;
- try {
- // 1.初始化connection工厂
- ConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
- // 2.创建Connection
- connection = connectionFactory.createConnection();
- // 3.打开连接
- connection.start();
- // 4.创建session
- Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
- // 5.创建消息目标
- Destination destination = session.createTopic(MQConstants.DESTINATION_SEND);
- // 6.创建消费者
- MessageConsumer consumer = session.createConsumer(destination);
- // 7.配置监听
- consumer.setMessageListener(new HelloTopicConsumer());
- } catch (JMSException e) {
- e.printStackTrace();
- }
- }
- public static void main(String[] args) {
- new HelloTopicConsumer().receive();
- }
- }
3.测试
访问网页:http://localhost:8161/admin/topics.jsp
单击那个Topics连接。
这里显示的是服务器上的主题,这些显示的都没有用,可以都删掉。
Name:主题的名称
Number Of Consumers:正在运行的消费者
Message Enqueued:进入消息队列的
Message Dequeued:出消息队列的
Operations:操作
下面就可以开始运行程序了,
注意顺序:先运行消费者:
这里会产生好几个主题,我们只看我们自己用的那个,(其实,其他几个是干嘛的,暂时还不清楚,以后再研究吧.....)
我们的消费者一直在运行
接下来,运行生产者:
控制台会输出:
再一次,刷新界面:
消费者还在运行,只生产了一条消息,而且已经被消费了。
ActiveMQ Pub/Sub版的HelloWorld的更多相关文章
- ActiveMQ P2P版的HelloWorld
1.2 JMS应用程序接口 ConnectionFactory: 用户用来创建到JMS提供者的连接的被管对象.JMS客户通过可移植的接口访问连接,这样当下层的实现改变时,代码不需要进行修改. 管理员 ...
- Mina入门:mina版之HelloWorld
一,前言: 在完成上篇文章<Mina入门:Java NIO框架Mina.Netty.Grizzly简介与对比>之后,我们现在可以正式切入Mina入门学习了. 二,搭建项目结构与解决项目依赖 ...
- Mina入门:mina版之HelloWorld[z]
Mina入门:mina版之HelloWorld [z] 一,前言: 在完成上篇文章<Mina入门:Java NIO框架Mina.Netty.Grizzly简介与对比>之后,我们现在可以正式 ...
- ActiveMQ 入门Nodejs版
ActiveMQ 入门下载与安装 官方下载地址 解压,运行bin/win[32|64]/activemq[.bat] 启动服务 环境信息 控制台: http://localhost:8161 默认端口 ...
- 初学tornado之MVC版helloworld
作者:the5fire | 标签: MVC tornado | 发布:2012-08-06 2:41 p.m. 文接上篇,看我一个简单的helloworld,虽然觉得这个框架着实精小,但是实际开发 ...
- ActiveMQ 了解
Active MQ 是JMS的一个具体实现,所以首先要对JMS有所了解. 1. JMS: 定义:Java消息服务(Java Message Service),是Sun是提出来的为J2EE提 ...
- FreeMarker使用小记(HelloWorld)
FreeMarker是开源的模板框架.对于它的介绍网上已经很多了.详情可参考主页:http://www.freemarker.org/ 现在我们就开始我们的FreeMarker版的Hello Worl ...
- Scala入门:从HelloWorld开始【源码及编译】
最近在学习Scala语言,虽然还没有完全学通, 但是隐约可以体会到Scala的简洁和强大. 它既能让程序员使用函数式编程, 也提供了全面的面向对象编程. 在刚刚开始读<Scala编程>的时 ...
- ActiveMQ安装与持久化消息
activityMQ官网:http://activemq.apache.org/ 有windows版与linux版 windows版启动 在bin目录下双击activemq.bat linux版的安 ...
随机推荐
- spring security文档地址
https://docs.spring.io/spring-security/site/docs/4.1.0.RELEASE/reference/htmlsingle/
- CentOS 7.0 Firewall防火墙配置
启动停止 获取firewall状态 systemctl status firewalld.service firewall-cmd --state 开启停止防火墙 开机启动:systemctl ena ...
- SQL SERVER的锁机制(三)——概述(锁与事务隔离级别)
五.锁与事务隔离级别 事务隔离级别简单的说,就是当激活事务时,控制事务内因SQL语句产生的锁定需要保留多入,影响范围多大,以防止多人访问时,在事务内发生数据查询的错误.设置事务隔离级别将影响整条连接. ...
- C#通过字符串名称来调用对应字符串名称的方法
前段时间在一个项目中,在一个地方要将函数所在类中的方法都调用一遍,但是否调用要通过配置文件中的内容决定.所以为了减少代码量,在网上查了相关信息,终于成功的将其应用到了项目中,我在这里将我做的一个简单例 ...
- wpf 的依赖属性只能在loaded 事件之后才能取到
wpf 的依赖属性只能在loaded 事件之后才能取到,在构造函数的 InitializeComponent(); 之后取不到 wpf 的依赖属性只能在loaded 事件之后才能取到,在构造函数的 ...
- 通过Yum快速部署LAMP与LNMP
LAMP动态网站部署架构是由一套 Linux+Apache+MySQL+PHP 组成的动态网站系统解决方案. LNMP动态网站部署架构是由一套 Linux+Nginx+MySQL+PHP 组成的动态网 ...
- 大众点评Cat--架构分析
转自:http://blog.csdn.net/szwandcj/article/details/51025669 Cat功能强大且多,光日志的报表和图表分析就有十几种,但文档却很少,寥寥无几找到一些 ...
- Windows打开应用,提示“此程序被组策略阻止”
Windows打开应用,提示"此程序被组策略阻止",该问题为组策略限制了用户使用某个应用程序,一般可以在 1 控制面板--->管理工具--->本地安全策略-->软 ...
- win下wamp虚拟主机配置
第一步:在http://www.wampserver.com/网站上下载Wampserver,可以根据计算机的版本(32位或者64位)下载对应的版本 第二步,傻瓜式安装(直接点击下一步,下一步就好). ...
- Selenium3 + Python3自动化测试系列四——鼠标事件和键盘事件
一.鼠标事件 在 WebDriver 中, 将这些关于鼠标操作的方法封装在 ActionChains 类提供. ActionChains 类提供了鼠标操作的常用方法. ActionChains 类的成 ...