ActiveMQ入门篇

ActiveMQ详细入门教程系列 两个系统或两个客户端之间进行消息传送,利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。异步化提升性能、降低耦合度、流量削峰。系统A发送消息给中间件后,自己的工作已经完成了,不用再去管系统B什么时候完成操作。而系统B拉去消息后,执行自己的操作也不用告诉系统A执行结果,所以整个的通信过程是异步调用的。 阅读详情

微信公众号:Java患者

ActiveMQ 简介

ActiveMQ是基于 Java 中的 JMS 消息服务规范实现的一个消息中间件,通过中间件我们可以实现异步调用、流量削峰等。

ActiveMQ安装

1) 将 apache-activemq-5.15.11-bin.tar.gz 上传到服务器

2) 解压 tar -zxvf apache-activemq-5.15.11-bin.tar.gz

3) 启动

进到bin目录

  ./activeMQ start 
  ./activeMQ status

查看状态后 ActiveMQ not running, Active没启动.

4) 输出日志到控制台,看错误信息

./activemq console

在报错信息中我们看到了hostname关键词,到百度查阅资料后是因为主机名中含有下划线

hostnamectl set-hostname  Java

通过该句命令修改主机的名字为Java,然后重新执行

./activemq start

启动成功,访问后台

(我在本机也安装了一个ActiveMQ,下文的操作将直接使用本机的ActiveMQ)

ActiceMQ DEMO

环境

导入相关依赖

<dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>activemq-all</artifactId>
    <version>5.15.9</version>
</dependency>
一对一

开启一个生产者

package com.zero.day1;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

/**
 * ActiveMQ测试类 Hello World
 */
public class Demo1 {

    public static void main(String[] args) {

        Demo1.producerQuene();
    }

    public static void producerQuene (){
        try {
            // Create a ConnectionFactory 创建工厂连接对象
            ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://127.0.0.1:61616");

            // Create a Connection 使用连接工厂创建一个连接对象
            Connection connection = connectionFactory.createConnection();
            connection.start();

            // Create a Session 创建会话session对象
            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

            // create the destination (Topic or Quene) 创建目标对象(一对一or一对多)
            Destination destination = session.createQueue("TEST.FOO1");

            // Create a MessageProducer from the Session to the Topic or Quene 创建生产者对象
            MessageProducer producer = session.createProducer(destination);

            String text = "hello world";

            // create a messages 创建一个消息对象
            TextMessage message = session.createTextMessage(text);

            // tell the producer to send the message 发送消息
            producer.send(message);
            System.out.println("发送成功");
            // clean up 关闭资源
            session.close();
            connection.close();



        } catch (Exception e) {
            System.out.println("Caught" + e);
            e.printStackTrace();

        }




    }
}


  查看后台

被消费者消费

public static  void consumerQuene () {
        try {

            // create a connectionFactory 创建工厂连接对象
            ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://127.0.0.1:61616");

            // create a connection 使用连接工厂创建一个连接对象
            Connection connection = connectionFactory.createConnection();
            connection.start();


            //create a session 创建会话session对象
            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

            // create the destination(Topic or Quene) 创建目标对象(一对一or一对多)
            Destination destination = session.createQueue("TEST.FOO1");

            // create a MessageConsumer from the session to the Topic or Quene 创建消费者对象
            MessageConsumer consumer = session.createConsumer(destination);

            // wait for a message 创建一个消息对象
            Message message = consumer.receive(1000);


            if (message instanceof TextMessage) {
                TextMessage textMessage = (TextMessage) message ;
                String text = textMessage.getText();

                System.out.println("Received: " + text);
            } else {
                System.out.println("Received: " + message);

            }

            consumer.close();
            session.close();
            connection.close();

        } catch (Exception e) {
            System.out.println("Caught: " + e);
            e.printStackTrace();
        }



    }

控制台

后台被消费一次

一对多

生产者

package com.zero.day2;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

/**
 * 使用ActiveMQ操作一对多消息通信
 */
public class ProducerDemo {
    public static void main(String[] args) {
        ProducerDemo.topicProducer();

    }


    public static void topicProducer () {
        try {
            ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://127.0.0.1:61616");

            Connection connection = connectionFactory.createConnection();

            connection.start();

            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

            Topic topic = session.createTopic("myTopic");

            MessageProducer producer = session.createProducer(topic);

            TextMessage textMessage = session.createTextMessage("hello");

            producer.send(textMessage);
            System.out.println("消息已经发送: " + textMessage.getText());
            producer.close();
            session.close();
            connection.close();



        } catch (Exception e) {
            System.out.println("Caught" + e);
            e.printStackTrace();

        }
    }



}

消费者

package com.zero.day2;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

public class ConsumerDemo {

    public static void main(String[] args) {
        ConsumerDemo.topicConsumer();
    }


    public static void topicConsumer () {
        try {
            ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://127.0.0.1:61616");

            Connection connection = connectionFactory.createConnection();

            connection.start();

            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

            Topic topic = session.createTopic("myTopic");

            MessageConsumer consumer = session.createConsumer(topic);

            consumer.setMessageListener(new MessageListener() {

                public void onMessage(Message message) {
                    if(message instanceof TextMessage){
                        TextMessage textMessage = (TextMessage)message;
                        try {
                            System.out.println(textMessage.getText());
                        } catch (JMSException e) {
                            e.printStackTrace();
                        }
                    }
                }
            });
            System.in.read();
            consumer.close();
            session.close();
            connection.close();


        } catch (Exception e) {
            System.out.println("Caught: " + e);
            e.printStackTrace();
        }
    }
}

注意: 要先启动消费者再启动生产者

专注分享Java技术,跟我一起学习吧

长按识别二维码关注

Docker安装ActiveMQ 在安装完Docker的机器上,安装activeMQ。 在docker hub上搜了一下activeMQ的镜像,然后选择了,下载量最多的和start最多的,但是上次更新已经是三年前了。 拉取镜像:docker pull webcenter/activemq 查看镜像:docker images Docker运行ActiveMQ镜像 首先创建挂载目录: mkdir /usr/soft/activemq mkdir /usr/soft/activemq/log 运行activeMQ镜像: 阅读详情

相关推荐

(一)利用Python实现数据集读取,Python基本文件操作介绍

机器学习是计算机对大量数据的分析过程,在机器学习的实际项目中,通常都需要准备数据集,数据集通常包含的数据数量是庞大的。例如,在处理计算机视觉领域的项目时,每一张图片都是一个单独的文件,为了提高模型训练的效果,图片数量通常会比较多,因此需要合理且高效的操作将所有的图片数据读取。本篇旨在介绍如何用Python对海量文件进行遍历,也是机器学习实践的第一步。.........

ZZR2631574030的博客 6355

ActiveMQ详解

消息的成功消费通常包含三个阶段:客户接收消息、客户处理消息和消息被确认。针对某个主题(Topic)的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息,而且为了消费消息,订阅者必须保持运行的状态。具有一个独特的非中间件的模式,你不需要安装和运行一个消息服务器或中间件,因为你的应用程序将扮演了这个服务角色。如果事务回滚,则消息会被再次传送。JMS是java的消息服务,JMS的客户端之间可以通过JMS服务进行异步的消息传输。的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。

一个老鸟的学习之路 9581

基于gm/id方法的折叠式共源共栅放大器设计实践

本文详细介绍了基于gm/id设计方法进行折叠式共源共栅放大器设计的完整流程。该方法通过确定晶体管的跨导效率(gm/id)作为核心设计参数,将复杂的放大器设计转化为有明确路径的优化问题。文章以设计一个增益80dB、带宽1GHz的两级放大器为例,逐步拆解了从指标分解、关键晶体管工作点选取、到实战仿真与微调的全过程,特别强调了第二级设计对稳定性的影响以及相位裕度的调试技巧。

w8x9y0z1的博客 414

MQ(ActiveMQ)原理及介绍

MQ原理介绍

偷得浮生半日闲 4万+

智能问数产品背后的Agent技术揭秘:从任务分解到工具调用的完整流程

本文深入解析智能问数产品背后的Agent技术,从任务分解到工具调用的完整流程。通过大模型驱动的语义理解和动态工具调度,Agent系统能高效处理复杂数据分析需求,显著提升响应速度和准确率。文章详细介绍了模块化架构、任务分解机制、动态工具调用及双通道记忆系统等核心技术,展示了大模型时代的新型数据分析范式。

weixin_30399821的博客 437

别再死记硬背了!用LabVIEW串口通信的3个真实项目案例,手把手教你从调试到部署

本文通过3个真实项目案例,详细讲解LabVIEW串口通信从调试到部署的全过程。涵盖Arduino温湿度监控、西门子PLC Modbus通信以及高可靠性通信框架设计,提供实用技巧和常见问题解决方案,帮助工程师快速掌握LabVIEW串口通信的实战应用。

weixin_30485379的博客 522

ActiveMQ--ActiveMQ简介

ActiveMQ     一、 ActiveMQ 简介       1 什么是 ActiveMQ       ActiveMQ 是 Apache 出品,最流行的,能力强劲的开源消息总线。      &...

我和井盖都笑了博客 3510

概率论基础-严士健 第二版 习题与补充1.6答案

概率论基础-严士健 第二版 习题与补充1.6答案 1.不独立。 设有一均匀正八面体,其第1,2,3,4面染红色,第1,2,3,5面染白色,第1,6,7,8面染黑色,现在以A,B,C分别表示投一次正八面体出现红、白、黑的事件,则 P(A)=P(B)=P(C)=12.P(A) = P(B) = P(C) = \frac{1}{2}.P(A)=P(B)=P(C)=21​. P(ABC)=18=P(A)P...

weixin_42341993的博客 2515

【ActiveMQ】ActiveMQ高级特性和用法

activemq v5.8.0 release 嵌入式ActiveMQ在自己的应用程序中嵌入一个消息队列。见代码模块 no-spring包embed下。 消息存储的持久化ActiveMQ的另一个问题就是只要是软件就有可能挂掉,挂掉不可怕,怕的是挂掉之后把信息给丢了,怎么办,可以进行消息的持久化,ActiveMQ提供了几种持久化方...

猫巳的博客 3081

Tomcat漏洞——弱口令爆破

靶机:CentOS7 IP:192.168.100.40。攻击机:kali IP:192.168.100.60。版 权 声 明:本博客所有文章除特别声明外,均采用。文章版权归作者所有,未经允许请勿转载!作 者:PeiyuJue。

weixin_57379923的博客 909

Kali Linux实战:用Impacket的secretsdump.py快速提取Windows域控哈希(附避坑指南)

本文详细介绍了如何在Kali Linux中使用Impacket的secretsdump.py脚本快速提取Windows域控哈希,包括环境准备、原理剖析、实战操作及常见问题解决方案。特别适合CTF竞赛和网络信息安全爱好者学习,提升渗透测试效率。

weixin_33670786的博客 409

activemq 阻塞不消费_ActiveMQ入门篇

什么是MQ?MQ,中文名字叫做消息中间件。既然是中间件,那么就说明它左边有东西,右边也有东西。那么左边是什么?右边又是什么呢?MQ在中间能干嘛呢?看看下面的例子。1、生活中的case:老师讲完了练习,然后对同学们说有问题的现在就过来问。然后张三李四王五赵六都有问题要问。那么他们就按顺序排队。张三需要5分钟,然后是李四8分钟,再然后才是王五10分钟,最后是赵六。这就相当于dubbo的RPC...

weixin_34184847的博客 2202

基于高斯两步移动搜寻法(2SFCA)的城市绿地可达性分析

第二步,对于每一个街道i,给定空间距离阈值d0,便形成另一个空间作用域,同样对于落在空间作用域内的每块绿地l的供给比率(Rl)利用高斯方程赋以权重,然后对这些加权后的供给比率(Rl)进行加和,便得到每个街道i的绿地可达性Ai。图3与图4是高斯两步移动搜索法的示例。在图3中,以d0为阈值,有1、2、3 三个街道中心点落在了绿地a的空间作用域内。同样在图4中,以d0为阈值,有a、c两个绿地中心点落在了街道2的空间作用域内,根据公式(3),对a、c高斯方程加权后的供需比率进行累加,便得到了街道2 的绿地可达性。

2301_77310370的博客 2404

ActiveMQ --- 入门篇

MQ,中文名字叫做消息中间件。既然是中间件,那么就说明它左边有东西,右边也有东西。那么左边是什么?右边又是什么呢?MQ在中间能干嘛呢?看看下面的例子。1、生活中的case: 老师讲完了练习,然后对同学们说有问题的现在就过来问。然后张三李四王五赵六都有问题要问。那么他们就按顺序排队。张三需要5分钟,然后是李四8分钟,再然后才是王五10分钟,最后是赵六。这就相当于dubbo的RPC远程调用。也就是说,张三问的时候老师这个系统只能响应张三,后面的人都得等着。这样就会导致学生和老师耦合度高,而且效率低,如果问问题的

2745

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

activemq 发两条只收到一条_ActiveMQ入门篇

什么是MQ?MQ,中文名字叫做消息中间件。既然是中间件,那么就说明它左边有东西,右边也有东西。那么左边是什么?右边又是什么呢?MQ在中间能干嘛呢?看看下面的例子。1、生活中的case:老师讲完了练习,然后对同学们说有问题的现在就过来问。然后张三李四王五赵六都有问题要问。那么他们就按顺序排队。张三需要5分钟,然后是李四8分钟,再然后才是王五10分钟,最后是赵六。这就相当于dubbo的RPC...

weixin_39781326的博客 392

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

ActiveMQ(一)-入门篇

一、目录分析 从上面看出一般的项目目录类似,简单分析下其作用: bin:为启动目录。 conf:为配置文件,核心文件有activemq.xml(核心配置,加载jetty.xml等文件和管理数据持久化)、jetty.xml(配置启动端口)、jetty-realm.properties(配置用户名密码)几个。在登录web控制台的时候,需要用户名和密码。 data:是消息持久化的地方,默认使

Mr.Lee 339

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

ActiveMQ学习 第一篇 入门篇

ActiveMQ 学习一 入门篇 实际应用中有多种MQ,包括MSMQ,Active MQ,Jboss MQ等。其中ActiveMQ是一个开源的JMS服务器,本文简单介绍java环境下Active MQ入门。 准备工作 1、下载ActiveMQ http://pan.baidu.com/s/1c1qwlJq 我下载的是apache-activemq-5.13.2,下载后解压缩即可。 2、启

xinglun88的专栏 436

消息中间件ActiveMQ 1 :入门篇

ActiveMQ的介绍 ActiveMQ是一种开源的基于JMS(Java Message Servie)规范的一种消息中间件的实现,现在先来入门了解ActiveMQ的java编码。

Hicodden的博客 283

ActiveMQ(一): 入门篇

JMS ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。它是面向消息(MOM)的中间件,为应用程序提供高效的、可扩展的、稳定的和安全的企业级消息通信。ActiveMQ的设计目标是提供标准的,面向消息的,能够跨越多语言和多系统的应用集成消息通信中间件。 前言: 在没有JMS出现的时候,很多应用系统存在这样的一种缺陷: 1、通信的异步性 client 端发起

技术宝库 299

ActiveMQ实战(一)-入门篇

概述Apache ActiveMQ是一个非常流行的,能力强劲的开源消息总线服,ActiveMQ 完全支持JMS1.1和J2EE 1.4规范。 官方介绍如下 Apache ActiveMQ ™ is the most popular and powerful open source messaging and Integration Patterns server. Apache

Ricky 3680

消息队列ActiveMQ-(入门篇简单易懂)

最近遇到一个问题:我们如何同步solr的索引库,那这牵连到服务与服务之间的调用。方案一:添加商品的业务逻辑中,添加一个同步索引库的业务逻辑。缺点:业务逻辑耦合度高,业务拆分不明确方案二:业务逻辑在taotao-search中实现,调用服务在taotao-manager实现。业务逻辑分开。缺点:服务之间的耦合度变高。服务的启动有先后顺序。方案三:使用消息队列。MQ是一个消息中间件。ActiveMQM...

蓝星花 9708

Spring环境下ActiveMQ的配置与应用(入门篇)

ActiveMQ的入门

kaka0509的专栏 760

ActiveMQ学习总结(2)——ActiveMQ入门实例教程

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34342578的博客 124

ActiveMQ的学习记录

先启动订阅,再发布消息各个消息中间件的比较点对点点对点模型是基于队列的,生产者发消息到队列,消费者从队列接收消息,队列的存在使得消息的异步传输成为可能。和我们平时给朋友发送短信类似。如果在Session关闭时有部分消息己被收到但还没有被签收(acknowledged),那当消费者下次连接到相同的队列时,这些消息还会被再次接收队列可以长久地保存消息直到消费者收到消息。消费者不需要因为担心消息会丢失而时刻和队列保持激活的连接状态,充分体现了异步传输模式的优势发布订阅(1) JMS的发布订阅总结。

weixin_68657865的博客 1473
上一篇: Java面试锦囊(一)
下一篇: ActiveMQ进阶篇-整合Spring
新时代Java农民工
博客等级 码龄7年 16粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值