mq的原理是什么

消息队列技术是分布式应用间交换信息的一种技术。消息队列可驻留在内存或磁盘上,队列存储消息直到它们被应用程序读走。通过消息队列,应用程序可独立地执行–它们不需要知道彼此的位置、或在继续执行前不需要等待接收程序接收此消息。

在分布式计算环境中,为了集成分布式应用,开发者需要对异构网络环境下的分布式应用提供有效的通信手段。为了管理需要共享的信息,对应用提供公共的信息交换机制是重要的。

消息队列为构造以同步或异步方式实现的分布式应用提供了松耦合方法。消息队列的API调用被嵌入到新的或现存的应用中,通过消息发送到内存或基于磁盘的队列或从它读出而提供信息交换。消息队列可用在应用中以执行多种功能,比如要求服务、交换信息或异步处理等。

中间件是一种独立的系统软件或服务程序,分布式应用系统借助这种软件在不同的技术之间共享资源,管理计算资源和网络通讯。它在计算机系统中是一个关键软件,它能实现应用的互连和互操作性,能保证系统的安全、可靠、高效的运行。

中间件位于用户应用和操作系统及网络软件之间,它为应用提供了公用的通信手段,并且独立于网络和操作系统。
中间件为开发者提供了公用于所有环境的应用程序接口,当应用程序中嵌入其函数调用,它便可利用其运行的特定操作系统和网络环境的功能,为应用执行通信功能。

如果没有消息中间件完成信息交换,应用开发者为了传输数据,必须要学会如何用网络和操作系统软件的功能,编写相应的应用程序来发送和接收信息,且交换信息没有标准方法,每个应用必须进行特定的编程从而和多平台、不同环境下的一个或多个应用通信。

例如,为了实现网络上不同主机系统间的通信,将要求具备在网络上如何交换信息的知识(比如用TCP/IP的socket程序设计);为了实现同一主机内不同进程之间的通讯,将要求具备操作系统的消息队列或命名管道(Pipes)等知识。

MQ的通讯模式

  1. 点对点通讯:点对点方式是最为传统和常见的通讯方式,它支持一对一、一对多、多对多、多对一等多种配置方式,支持树状、网状等多种拓扑结构。
  2. 多点广播:MQ适用于不同类型的应用。其中重要的,也是正在发展中的是"多点广播"应用,即能够将消息发送到多个目标站点(Destination List)。
    可以使用一条MQ指令将单一消息发送到多个目标站点,并确保为每一站点可靠地提供信息。MQ不仅提供了多点广播的功能,而且还拥有智能消息分发功能,在将一条消息发送到同一系统上的多个用户时,MQ将消息的一个复制版本和该系统上接收者的名单发送到目标MQ系统。
    目标MQ系统在本地复制这些消息,并将它们发送到名单上的队列,从而尽可能减少网络的传输量。
  3. 发布/订阅(Publish/Subscribe)模式:发布/订阅功能使消息的分发可以突破目的队列地理指向的限制,使消息按照特定的主题甚至内容进行分发,用户或应用程序可以根据主题或内容接收到所需要的消息。
    发布/订阅功能使得发送者和接收者之间的耦合关系变得更为松散,发送者不必关心接收者的目的地址,而接收者也不必关心消息的发送地址,而只是根据消息的主题进行消息的收发。
    在MQ家族产品中,MQ Event Broker是专门用于使用发布/订阅技术进行数据通讯的产品,它支持基于队列和直接基于TCP/IP两种方式的发布和订阅。
  4. 群集(Cluster):为了简化点对点通讯模式中的系统配置,MQ提供Cluster(群集)的解决方案。群集类似于一个域(Domain),群集内部的队列管理器之间通讯时,不需要两两之间建立消息通道,而是采用群集(Cluster)通道与其它成员通讯,从而大大简化了系统配置。
    此外,群集中的队列管理器之间能够自动进行负载均衡,当某一队列管理器出现故障时,其它队列管理器可以接管它的工作,从而大大提高系统的高可靠性

mq的持久化是怎么做的;

以ActiveMq为例

ActiveMQ消息持久化方式,分别是:文件、mysql数据库、oracle数据库

a.文件持久化:

ActiveMQ默认的消息保存方式,一般如果没有修改过其他持久化方式的话可以不用修改配置文件。

如果是修改过的,打开盘符:\apache-activemq-版本号\conf\activemq.xml,然后找到节点,将其替换成以下代码段

这样就算配置完成了文件持久化方式了,重启项目和ActiveMQ,发送一定消息队列之后关闭ActiveMQ服务,再启动,你可以看到之前发送的消息未消费的依然保持在文件里面,继续让监听者消费。

b.MySQL持久化

首先需要把MySql的驱动放到ActiveMQ的Lib目录下,我用的文件名字是:mysql-connector-java-5.1.27.jar

然后打开盘符:\apache-activemq-版本号\conf\activemq.xml,然后找到节点,将其替换成以下代码段

这样就算完成了mysql持久化配置了,验证方式同a,打开mysql数据库你能看到三张表,分别是:activemq_acks,activemq_lock,activemq_msgs。

c.Oracle持久化

 oracle的配置和mysql一样,在Lib目录下,放入oracle的驱动包,然后配置一下配置文件即可。

「笔耕不辍」MQ的原理以及持久化相关推荐

  1. 一篇带你读懂MQ——MQ的原理、持久化以及使用场景总结

    一.MQ简介及特点 MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们 ...

  2. 使用google map实现周边搜索的功能_「转」“搜索”的原理,架构,实现,实践,面试不用再怕了...

    可能99%的同学不做搜索引擎,但99%的同学一定实现过检索功能.搜索,检索,这里面到底包含哪些技术的东西,希望本文能够给大家一些启示. 全网搜索引擎架构与流程如何? 全网搜索引擎的宏观架构如上图,核心 ...

  3. 学习 launch-editor 源码整体架构,探究 vue-devtools「在编辑器中打开组件」功能实现原理...

    1. 前言 你好,我是若川[1],微信搜索「若川视野」关注我,专注前端技术分享,一个愿景是帮助5年内前端开阔视野走向前列的公众号.欢迎加我微信ruochuan12,长期交流学习. 这是学习源码整体架构 ...

  4. 「MoreThanJava」一文了解二进制和CPU工作原理

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...

  5. 「kd指标」kd指标原理

    本文目录一览: 1.kd是什么意思? 2.Kd指标的含义是什么? 3.股票中KD是什么意思 4.股票kd是什么指标 5.股票里的KD指标是什么意思?怎么看? 6.kd指标如何设置参数? kd是什么意思 ...

  6. Java应用诊断工具】「BTrace」基本概念和原理的介绍(1)

    Java应用诊断工具]「BTrace」基本概念和原理的介绍(1) 系列文章 「BTrace」基本概念和初步介绍(1) 「BTrace」安装介绍和使用原理(2)- 未完成 「BTrace」实战代码进行调 ...

  7. 开源教程 「nlp-tutorial」!用百行代码搞定各类NLP模型

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 参与:思源.贾伟   来源:机器之心 NLP 的研究,从词嵌入到 CNN ...

  8. 25 张图读懂「文件系统」

    作者 | 小林coding 来源 | 小林coding(CodingLin) 文件系统的基本组成 文件系统是操作系统中负责管理持久数据的子系统,说简单点,就是负责把用户的文件存到磁盘硬件中,因为即使计 ...

  9. 一口气搞懂「文件系统」,就靠这 25 张图了

    前言 不多 BB,直接上「硬菜」. 正文 文件系统的基本组成 文件系统是操作系统中负责管理持久数据的子系统,说简单点,就是负责把用户的文件存到磁盘硬件中,因为即使计算机断电了,磁盘里的数据并不会丢失, ...

  10. 分布式系统关注点(19)——深入浅出「异步」

    如果第二次看到我的文章,欢迎「文末」扫码订阅我个人的公众号(跨界架构师)哟~  每周五早8点 按时送达到公众号.当然了,也会时不时加个餐- Z哥在前面的三篇文章里和你一起聊了「高性能」主题下与「缓存」 ...

最新文章

  1. 机器学习中特征选择怎么做?这篇文章告诉你
  2. Linux安装Gradle
  3. python反转列表的三种方式
  4. Linux rpm软件管理(安装/卸载/查询)
  5. 【2017年第2期】应用驱动的大数据融合平台建设
  6. 共享锁与排它锁区别(转)
  7. MFC 设置应用程序开机启动并设置运行路径
  8. 动易Ajax登陆调用
  9. 计算机网络---DHCP/NAT(简单介绍)
  10. bzoj 1878: [SDOI2009]HH的项链(主席树)
  11. sql中exist()的用法
  12. 深入解读Linux内存管理系列(7)——伙伴系统
  13. Tracert命令原理
  14. 苹果手机计算机记录,苹果手机怎么查找以前的历史通话记录
  15. 天肌处理器天梯排行榜2022 天肌处理器发布时间排行
  16. linux 内核rps,Linux内核中RPS/RFS代码分析
  17. 在线问诊第一平台微医引入智齿 构建智慧客服体系
  18. 自然语言处理基础 一 及 sklearn实现 分析词代码实现
  19. Dex.top“50计划”新玩法,能否让行业格局重新洗牌?
  20. HTML前端开发入门之表单标签/labei标签/datalist标签

热门文章

  1. 简明python指南(预览版)
  2. camera成像能力-清晰度(Resolution,Sharpen)
  3. [苹果开发者账号]06 转让开发者账号后,开发者年费自动续费问题
  4. maya python插件_使用Python开发Maya导出插件的一些辅助
  5. java 项目骨架,maven项目中骨架
  6. matlab怎么通分,matlab常见符号运算( 因式分解、展开、合并、简化及通分等,计算导数,积分,符号求和、代数方程和微分方程求解)...
  7. Linux云计算虚拟化-KVM桌面虚拟化技术
  8. 信息系统项目管理师(第1章)
  9. 服务器2008修改虚拟内存,Windows 2008 关闭系统虚拟内存功能 如何删除pagefile.sys
  10. 网页加速系列(六)、 网页加速之进阶下篇