MQ 队列消息

news2024/11/15 4:03:28

3b294d2447d24f83aaed27b227dc7bc7.jpg消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成,通过提供消息传递和消息排队模型,它可以在分布式环境下拓展进程间的通信,对于消息中间件,常见的角色大致也就有Producer(生产者).Consumer(消费者)

 

 

 

 

MQ 消息中间件 消息队列

 

Message Queue简称MQ

 

种类:

 

1.Apache ActiveMQ  

 

     ActiveMQ是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ是一个完全支持JMS1.1和J2EE1.4规范的JMS Provider实现.我们在本次课程中介绍ActiveMQ的使用.

 

2.阿里 RocketMQ

 

  

 

3.Pivotal 开发RabbitMQ

 

  AMQP协议的领导实现,支持多种场景.淘宝的Mysql集群内部有使用它进行通讯,OpenStack开源云平台的通信组件,最先在金融行业得到运用.

 

ZeroMQ

 

  史上最快的消息队列系统.

 

kafka:

 

  Apache下的一个子项目.特点:高吞吐,在一台普通的服务器上既可以达到10W/s的吞吐速率;完全的分布式系统.适合处理海量数据.

 

使用场景(为什么使用MQ?):

 

//TODO

 

JMS简介

 

什么是JMS?

 

    JMS(Java Messaging Service)是java平台上有关面向消息中间件的技术规范(可以使用jmsTemplate),它便于消息系统中的java应用程序进行消息交换,并且通过提供标准的产生,发送,接收消息的接口库简化企业应用的开发.

 

  JMS本身只定义了一系列的接口规范,是一种与厂商无关的API.用来访问消息收发系统.它类似于JDBC(java Database Connectivity);这里,JDBC是可以用来访问许多不同关系数据库的的API.而JMS则提供同样与厂商无关的访问方法,以访问消息收发服务.许多厂商目前都支持JMS,包括IBM的MQseries.BEA的Weblogic.JMSservice和Progress的SonicMQ,这只是几个例子.JMS使您能够通过消息收发服务(有时称为消息中介程序或者路由器)从一个JMS客户机向另一个JMS客户机发送消息,消息是JMS中的一种类型对象,由两部分组成:报头和消息主体.

 

报头由路由信息以及有关该消息的元数据组成.

 

消息主体则携带着应用程序的数据或有效负载.

 

  JMS定义了五种不同的消息正文格式,以及调用的消息类型.允许你发送并接收以一些不同形式的数据,提供现有消息格式的一些级别的兼容性.

 

  TextMessage ---一个字符串对象

 

  MapMessage---一套名称-值对

 

  ObjectMessage--一个序列化的java对象

 

  ByteMessage -- 一个字节的数据流

 

  StreamMessage --Java原始值的数据流

 

JMS消息传递类型

 

  对于消息的传递有两种类型:

 

    一种是点对点,即一个生产者和一个消费者一一对应.

 

    

 

    另一种是发布/订阅模式,即一个生产者产生消息并进行发送后,可以由多个消费者进行接收.

 

 

 

JMS入门小Demo

 

现在是点对点模式:

 

  点对点的模式主要建立在一个队列上面,当连接一个列队的时候,发送端不需要知道接收端是否正在接收,可以直接行ActiveMQ发送消息,发送的消息,将会先进入队列中,如果有接收端在监听,则会发现接收端,如果没有接收端接收,多个接收端,但是一条消息,只会被一个接收端给接收到,那个接收端先连上ActiveMQ,则会先接收到,而后来的接收端则接收不到那条消息.

 

创建的是一个没有使用任何骨架的java工程

 

引入的依赖为:

 

复制代码

   <dependencies>

        <dependency>

            <groupId>org.apache.activemq</groupId>

            <artifactId>activemq-client</artifactId>

            <version>5.13.4</version>

        </dependency>

    </dependencies>

    <build>

        <plugins>

            <!-- java编译插件 -->

            <plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-compiler-plugin</artifactId>

                <version>3.2</version>

                <configuration>

                    <source>1.8</source>

                    <target>1.8</target>

                    <encoding>UTF-8</encoding>

                </configuration>

            </plugin>

        </plugins>

    </build>

复制代码

   代码

 

复制代码

/**

 * @Auther:qingmu

 * @Description:脚踏实地,只为出人头地

 * @Date:Created in 16:16 2019/4/23

 */

 

import org.apache.activemq.ActiveMQConnectionFactory;

 

import javax.jms.*;

 

/**

 * 点对点模式

 * 生产者

 */

 

public class QueueProducer {

    public static void main(String[] args) throws Exception {

        //1.创建连接工厂

        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.200.128:61616");

        //2.获取连接

        Connection connection = connectionFactory.createConnection();

        //3.启动连接

        connection.start();

        //4.获取session (参数1:是否启动事务,参数2:消息确认模式)

        /**

         * AUTO_ACKNOWLEDGE = 1 自动确认

         • CLIENT_ACKNOWLEDGE = 2 客户端手动确认

         • DUPS_OK_ACKNOWLEDGE = 3 自动批量确认

         • SESSION_TRANSACTED = 0 事务提交并确认

 

         */

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

        //5.创建队列对象

        Queue queue = session.createQueue("test-queue");

        //6.创建消息生产者

        MessageProducer producer = session.createProducer(queue);

        //7.创建消息

        TextMessage textMessage = session.createTextMessage("欢迎来到神奇的");

        //8.发送消息

        producer.send(textMessage);

        //9.关闭资源

        producer.close();

        session.close();

        connection.close();

 

    }

}

复制代码

直接运行这个main方法,后可以mq中查看到:

 

 

 

消费者的代码为:

 

复制代码

/**

 * @Auther:qingmu

 * @Description:脚踏实地,只为出人头地

 * @Date:Created in 16:23 2019/4/23

 */

 

import org.apache.activemq.ActiveMQConnectionFactory;

 

import javax.jms.*;

 

/**

 * 点对点模式

 * 消息消费者

 */

public class QueueConsumer {

    public static void main(String[] args) throws Exception{

        //1.创建连接工厂

        ConnectionFactory connectionFactory=new ActiveMQConnectionFactory("tcp://192.168.200.128:61616");

        //2.获取连接

        Connection connection = connectionFactory.createConnection();

        //3.启动连接

        connection.start();

        //4.获取session (参数1:是否启动事务,参数2:消息确认模式)

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

        //5.创建队列对象

        Queue queue = session.createQueue("test-queue");

        //6.创建消息消费

        MessageConsumer consumer = session.createConsumer(queue);

 

        //7.监听消息

        consumer.setMessageListener(new MessageListener() {

            public void onMessage(Message message) {

                TextMessage textMessage=(TextMessage)message;

                try {

                    System.out.println("接收到消息:"+textMessage.getText());

                } catch (JMSException e) {

                    // TODO Auto-generated catch block

                    e.printStackTrace();

                }

            }

        });

        //

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/188232.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构基础】树 - 基础和Overview

知识体系结构树树是一种数据结构&#xff0c;它是n(n>0)个节点的有限集。n0时称为空树。n>0时&#xff0c;有限集的元素构成一个具有层次感的数据结构。区别于线性表一对一的元素关系&#xff0c;树中的节点是一对多的关系。树具有以下特点:n>0时&#xff0c;根节点是…

Linux嵌入式开发——文件权限

文章目录Linux嵌入式开发——文件权限文件权限文件权限管理修改文件权限修改文件所属用户拥有者拥有者组Linux嵌入式开发——文件权限 文件权限 文件权限是指不同的用户或用户组对某个文件拥有的权限&#xff0c;文件的权限分为三种&#xff0c;并且可以使用二进制表示文件权…

kerberos环境下parcel方式部署flink1.15.3 基于CDH6.3.2 Flink on Yarn

1.1 Flink on Yarn的优势相对于 Standalone 模式&#xff0c;在Yarn 模式下有以下几点好处&#xff1a;1.资源按需使用&#xff0c;提高集群的资源利用率&#xff1b;2.任务有优先级&#xff0c;根据优先级运行作业&#xff1b;3.基于 Yarn 调度系统&#xff0c;能够自动化地处…

通信原理笔记—模拟信号的数字编码

目录 低通与带通信号的抽样定理&#xff1a; 模拟信号数字编码的基本概念&#xff1a; 模拟信号的抽样&#xff1a; 低通信号的理想抽样&#xff1a; 低通采样定理&#xff1a; 采样方式&#xff1a; 冲激采样示例&#xff1a; 低通信号的自然抽样&#xff1a; 带通抽样…

正版授权|Charles 4 网络封包分析调试工具软件

Charles 4 是一款 HTTP 代理 /HTTP 监视器/反向代理&#xff0c;使开发人员能够查看其机器和 Internet 之间的所有 HTTP 和 SSL / HTTPS流量。这包括请求、响应和 HTTP 标头&#xff08;包含 Cookie 和缓存信息&#xff09;。 授权分类&#xff1a;单许可证 站点许…

Python程序设计-第2章Python程序语句

第2章Python程序语句一.预习笔记 1.1 if语句 if 条件 : 执行语句 注意&#xff1a;条件后面要有 : 号&#xff0c;其次条件不需要括号包裹&#xff0c;然后执行语句需要有缩进 1.2 if else语句 if 条件 : 执行语句1 else : 执行语句2 注意&#xff1a;条件成立执行语…

Vue3中使用Tinymce富文本编辑器(版本最新)

使用目录前言一、安装方法一&#xff08;npm、yarn下载&#xff09;二、安装方法二&#xff08;下载官网压缩包方法&#xff09;——推荐总结前言 最近使用了WangEditor编辑器和Tinymce编辑器&#xff0c;使用方法如下&#xff08;采用的编辑器版本是官网最新的&#xff09; 汉…

@Configuration 和 @Component 区别

本文参考1&#xff1a;https://blog.csdn.net/isea533/article/details/78072133 本文参考2&#xff1a;https://blog.csdn.net/weixin_52850476/article/details/124410800 一句话概括就是 Configuration 中所有带 Bean 注解的方法都会被动态代理&#xff0c;因此调用该方法…

数据库密码定期轮换(AWS版)

问题 需要定期轮换AWS上面的RDS数据库的密码&#xff0c;而且&#xff0c;需要让业务程序无感知。 思路 AWS有个一个aws-secretsmanager-jdbc库&#xff0c;只要在SpringBoot的基础上面集成即可&#xff0c;就可以使用secrets manager来定期轮换数据库的密码了。 解决步骤 …

Excel VBA 讲座05 - InputBox和MsgBox使用

本篇介绍的内容&#xff1a; 1&#xff0c;当用户使用宏或procedure时&#xff0c;使用InputBox来接收或收集用户输入的信息。 2&#xff0c;根据需求使用IF语句构建逻辑。 3&#xff0c;使用Message Box将信息展示给用户&#xff0c;比如用户输出错误&#xff0c;就提示用户…

np.loadtxt()读取数据

前言 机器学习中使用np.loadtxt()可以高效的导入数据&#xff0c;np.loadtxt()适合.txt文件和.csv文件。但是它默认读取float类型的值。 1.np.loadtxt()读取txt文件 1-1 基础参数 numpy.loadtxt(fname, dtype, comments#, delimiterNone, convertersNone, skiprows0, usecol…

uniapp获取支付宝user_id - 支付宝提现 - 登录授权 - APP支付宝登陆 - H5支付宝授权

效果图 uniapp须知(无奈之处) uniapp绑定支付宝user_id提现 - 方法对比: ==== 不同接口 ==== 【APP支付宝登录】 https://opendocs.alipay.com/open/218/105325 【网站支付宝登录】

PMP证书有什么用?

有没有用看你的考证目的&#xff0c;总的来说就是敲门砖的作用&#xff0c;项目招聘、应聘项目经理都需要pmp 证书。⭕但是事在人为&#xff0c;祈祷考完 PMP 就能升职加薪走上人生巅峰的想法&#xff0c;一纸证书是做不到的。PS&#xff1a;身边有考了 PMP 之后跳槽薪资涨幅 3…

阳康后身体还是不舒服怎么办?

很多年轻朋友阳康后恢复的还可以&#xff0c;逐渐回到以前的身体状态&#xff0c;但是家里老人体质偏弱&#xff0c;恢复情况就没那么乐观了。有些还一直伴随着没有嗅觉、疲惫、咳嗽等后遗症。要让老人快速恢复健康&#xff0c;生病后一定要注意这几点&#xff1a;每天保证7-8小…

测试开发中的虫剂悖论

测试开发中的虫剂悖论 1 初识虫剂悖论 提到 虫剂悖论(pesticide paradox)&#xff0c;我相信很多人都没听说的&#xff0c;除非是生物学专业的同学或者老师。 虫剂悖论描述的是重复使用某种农药杀灭害虫&#xff0c;时间越久&#xff0c;杀虫的效果就越差。 之所以这样&#xf…

压阻式(压)力传感器-个人笔记

这是个人笔记 最终要求&#xff0c;单个的压阻式压力传感器、阵列之后的压力传感器、三维力传感器 关键词&#xff1a;力传感器&#xff0c;压力传感器&#xff0c;多轴力传感器&#xff0c;应变式传感器&#xff0c;应变式力传感器&#xff0c;电阻应变式传感器&#xff0c;f…

除 svn、Testlink 外,还有哪些不错的测试用例管理工具?

类似TestLink的 9 大测试用例管理平台&#xff1a;1、PingCode&#xff1b;2、TestRail&#xff1b;3、Xray&#xff1b;4、Jira&#xff1b;5、PractiTest&#xff1b;6、PractiTest&#xff1b;7. Zephyr Enterprise&#xff1b;8、MeterSphere&#xff1b;9、Bugzilla。一、…

【Flink】浅谈Flink架构和调度

【Flink】浅谈Flink架构和调度 Flink架构 Flink 是一个分布式系统&#xff0c;需要有效分配和管理计算资源才能执行流应用程序。它集成了所有常见的集群资源管理器&#xff0c;例如【Hadoop YARN】、【Apache Mesos】和【Kubernetes】&#xff0c;但也可以设置作为独立集群甚…

Ethercat系列(2)PDO动态映射设置过程

过程数据对象PDOPDO一般用于实时数据更新&#xff1b;其分为接收PDO&#xff08;RxPDO&#xff09;和发送PDO&#xff08;TxPDO&#xff09;&#xff0c;前者的数据流方向是主站到从站&#xff0c;TxPDO是从站到主站。PDO功能支持同步周期的刷新方式&#xff0c;也支持非周期性…

解决nacos2.1版本连接mysql8.x版本异常的问题

在测试环境部署nacos集群的时候使用的是mysql5.7版本&#xff0c;部署没有什么异常。但是在生产环境中我们使用的是mysql8.x版本&#xff0c;在启动nacos的时候各种报错。在网上看了很多解决办法花了挺长时间去排错也没有处理好问题网上最常见的两种方式修改pom文件&#xff1a…