消息队列

PHP消息队列实现及应用讲述

不羁的心 提交于 2020-04-06 05:33:29
一、认识消息队列 1.1 消息对列概念   从本质上说消息对列就是一个队列结构的中间件,也就是说消息放入这个中间件之后就可以直接返回,并不需要系统立即处理,而另外会有一个程序读取这些数据,并按顺序进行逐次处理。   也就是说当你遇到一个并发特别大并且耗时特别长同时还不需要立即返回处理结果,使用消息队列可以解决这类问题。 1.2 核心结构 由一个业务系统进行入队,把消息逐次插入到消息队列中,插入成功之后直接返回成功的结果,后续会有一个消息处理系统,这个系统会把消息系统中的记录逐次进行取出并进行处理,完成一个出队的流程。 1.3 应用场景   数据冗余:比如订单系统,后续需要严格的进行数据转换和记录,消息队列可以把这些数据持久化的存储在队列中,然后有订单,后续处理程序进行获取,后续处理完之后在把这条记录进行删除来保证每一条记录都能够处理完成。   系统解耦:使用消息系统之后,入队系统和出队系统是分开的,也就说只要一天崩溃了,不会影响另外一台系统正常运转。   流量削峰:例如秒杀和抢购,我们可以配合缓存来使用消息队列,能够有效的顶住瞬间访问量,防止服务器承受不住导致崩溃。   异步通信:消息本身使用入队之后可以直接返回。   扩展性:例如订单队列,不仅可以处理订单,还可以给其他业务使用。   排序保证:有些场景需要按照产品的顺序进行处理比如单进单出从而保证数据按照一定的顺序处理

五分钟学后端技术:如何学习分布式系统和相关技术

倾然丶 夕夏残阳落幕 提交于 2020-04-06 05:21:46
转载自 https://www.cnblogs.com/wetest/p/6806506.html 和 https://www.cnblogs.com/dudu0614/p/8821811.html 什么是分布式系统 分布式这一概念,一直都是后端工程师绕不过去的一个坎,今天,我们就一起来看看到底什么是分布式系统,又有哪些分布式技术世我们需要学习的。 根据百度百科的介绍,分布式系统(distributed system)是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。 从分布式系统的诞生说起 我们常常会听说,某个互联网应用的服务器端系统多么牛逼,比如QQ、微信、淘宝。那么,一个互联网应用的服务器端系统,到底牛逼在什么地方?为什么海量的用户访问,会让一个服务器端系统变得更复杂?本文就是想从最基本的地方开始,探寻服务器端系统技术的基础概念。 承载量是分布式系统存在的原因 当一个互联网业务获得大众欢迎的时候,最显著碰到的技术问题,就是服务器非常繁忙。当每天有1000万个用户访问你的网站时,无论你使用什么样的服务器硬件,都不可能只用一台机器就承载的了。因此,在互联网程序员解决服务器端问题的时候,必须要考虑如何使用多台服务器,为同一种互联网应用提供服务,这就是所谓

Rabbitmq群集部署

 ̄綄美尐妖づ 提交于 2020-04-05 00:36:25
一、部署Rabbitmq集群 Rabbitmq集群大概分为两种方式: 1、普通模式:默认的集群模式,消息的尸体只存在一个节点上; 2、镜像模式:把需要的队列做成镜像,存在于多个节点。 ha-mode: all:列队到所有节点; exatly:随机镜像到其他节点上; nodes:镜像到指定节点上。 集群节点模式: 1、内存节点:工作在内存上; 2、磁盘节点:工作在磁盘上; 例外:内存节点和磁盘节点共同存在,提高访问速度的同时增加数据持久化。 相比内存节点虽然不写入磁盘,但是它执行比磁盘节点要好,集群中,只需要一个磁盘来保存状态就足够了,如果集群中只有内存节点,那么节点一旦宕机,所有的状态、消息都会丢失,无法实现数据的持久化。 rpm包 (提取码:rv8g) 1、环境如下 2、安装rabbitmq服务 在192.168.171.134/135/140节点上进行如下操作,部署rabbitmq服务: [root@localhost ~]# mkdir rabbitmq [root@localhost ~]# cd rabbitmq/ [root@localhost rabbitmq]# ls erlang-18.1-1.el6.x86_64.rpm rabbitmq-server-3.6.6-1.el6.noarch.rpm socat-1.7.3.2-2.el7.x86_64.rpm

RabbitMQ学习笔记(1)----RabbitMQ简介与安装

谁都会走 提交于 2020-04-02 20:58:12
·1. 什么是RabbitMQ?   RabbitMQ是流行的开源消息队列系统,用erlang语言开发。RabbitMQ是AMQP(高级消息队列协议)的标准实现。   而AMQP协议则是指:即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。   结构图如下:      RabbitMQ有几个重要的概念,如下:     Broker:简单来说就是消息队列服务器实体。     Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。     Queue:消息队列载体,每个消息都会被投入到一个或多个队列。     Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。     Routing Key:路由关键字,exchange根据这个关键字进行消息投递。     vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。     producer:消息生产者,就是投递消息的程序。     consumer:消息消费者,就是接受消息的程序。     channel:消息通道,在客户端的每个连接里

RabbitMQ消息队列之基础 (二)

非 Y 不嫁゛ 提交于 2020-04-02 19:59:40
1,路由模式 direct direct 模式基础概念请参考 RabbitMQ消息队列之基础 (二) direct类型的路由规则很简单,它会把消息路由到那些binding key与routing key完全匹配的Queue中; 也就是说: 只要队列名、交换机、路由key完全一致,就可以匹配到该消息。 这里直接演示代码: 生产者: 1 //direct类型 路由模式 1对1匹配 2 //生产者发送消息时需要指定一个路由键(routingKey),交换机只会把消息转发给包含该路由键的队列 3 //string exchange = "TestMq_Exchange"; //交换机 4 //string routingKey = "TestMq_RoutingKey"; //路由键 5 6 string queueName = "TestMq"; //队列名 7 for (int i = 0; i < 10; i++) 8 { 9 string message = "Hello World:" + i; 10 RabbitMqConfig rabbitMqConfig = RabbitMqConfig.Init(); //初始化配置文件 11 ConnectionFactory connFactory = new ConnectionFactory 12 { 13 Uri = new

使用Kafka构建数据管道

社会主义新天地 提交于 2020-04-02 16:40:55
感谢参考原文- http://bjbsair.com/2020-04-01/tech-info/18512.html 目标:使用Kafka和使用Redis的服务层编写数据管道。 先决条件 请根据您的操作系统安装以下组件: · Kafka · Zookeeper · Redis · Java 目标观众 本文针对的是正在构建第一个数据管道的工程师。 但是,已建立数据管道的工程师可以快速浏览它。 期待什么 关于如何建立数据管道的概念证明。 这不包括数据管道可操作,具有弹性和可扩展性(即生产就绪)所需的工作。 大纲 假设我们有一种只能通过语音访问的产品(类似于Google Home或Amazon Alexa)。 在产品(以硬件设备的形式)处于打开状态的整个会话中,我们有权听取用户的对话。 Photo by Ben White on Unsplash 目的 在每个家庭(或设备通过WiFi连接的任何位置)中查找当前正在讨论的有趣话题。 这些信息将帮助我们更好地为客户提供服务。注意:我们要找到的有趣主题与Kafka主题不同。 以下各节中有关Kafka主题的更多信息。 方法 · 语音对话应转换为文本。 语音朗读等技术可为我们提供帮助。 我们可以建立自己的模型或购买第三方服务。 对于此帖子,此模块超出范围。 · 转换后的文本应实时发送到后端系统。 这些系统/过程称为生产者。 ·

Active MQ 消息队列

孤者浪人 提交于 2020-04-02 08:30:07
目录 1、前言 2、Active MQ简介 3、Active MQ单点部署 1、前言 MQ是 消息中间件 ,是一种在 分布式系统 中 应用程序 借以 传递消息 的 媒介 ,常用的有ActiveMQ,RabbitMQ,kafka。 2、Active MQ简介 ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。 ActiveMQ 是一个完全支持 JMS1.1 和 J2EE 1.4 规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。 官网: http://activemq.apache.org/ 特点: 支持来自Java,C,C ++,C#,Ruby,Perl,Python,PHP的各种跨语言客户端和协议 完全支持JMS客户端和Message Broker中的企业集成模式 支持许多高级功能,如消息组,虚拟目标,通配符和复合目标 完全支持JMS 1.1和J2EE 1.4,支持瞬态,持久,事务和XA消息 Spring支持,以便ActiveMQ可以轻松嵌入到Spring应用程序中,并使用Spring的XML配置机制进行配置 专为高性能集群,客户端 - 服务器,基于对等的通信而设计 支持可插拔传输协议,例如in-VM,TCP,SSL,NIO,UDP,多播,JGroups和JXTA传输

JavaWeb项目架构之Kafka分布式日志队列

与世无争的帅哥 提交于 2020-04-02 06:41:18
架构、分布式、日志队列,标题自己都看着唬人,其实就是一个日志收集的功能,只不过中间加了一个Kafka做消息队列罢了。 kafka介绍 Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 特性 Kafka是一种高吞吐量的分布式发布订阅消息系统,有如下特性: 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。 高吞吐量:即使是非常普通的硬件Kafka也可以支持每秒数百万的消息。 支持通过Kafka服务器和消费机集群来分区消息。 支持Hadoop并行数据加载。 主要功能 发布和订阅消息流,这个功能类似于消息队列,这也是kafka归类为消息队列框架的原因 以容错的方式记录消息流,kafka以文件的方式来存储消息流 可以再消息发布的时候进行处理 使用场景 在系统或应用程序之间构建可靠的用于传输实时数据的管道,消息队列功能 构建实时的流数据处理程序来变换或处理数据流,数据处理功能 消息传输流程 相关术语介绍 Broker Kafka集群包含一个或多个服务器

部署Rabbitmq

爷,独闯天下 提交于 2020-04-01 14:07:21
一、Rabbitmq概念 RabbitMQ是一个开源的靠AMQP协议实现的服务,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。 AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。 它可以使对应的客户端(client)与对应的消息中间件(broker)进行交互。消息中间件发布者(publisher)那里收到消息(发布消息的应用,也称为producer),然后将他们转发给消费者(consumers,处理消息的应用)。由于AMQP是一个网络协议,所以发布者、消费者以及消息中间件可以部署到不同的物理机器上。 Rabbitmq使用场景: 消息队列在实际应用中常用在异步处理、应用解耦、流量削锋和消息通讯这四个场景。 二、部署Rabbitmq 注:在开始之前,主机名最好为默认的localhosts(如果不是,会在启动rabbitmq时报错,解决方法:重启主机,再启动rabbitmq) 下载 rpm包 (提取码

windows下 安装 rabbitMQ 及操作常用命令

无人久伴 提交于 2020-04-01 07:48:35
rabbitMQ是一个在AMQP协议标准基础上完整的,可服用的企业消息系统。它遵循Mozilla Public License开源协议,采用 Erlang 实现的工业级的消息队列(MQ)服务器,Rabbit MQ 是建立在Erlang OTP平台上。 1.安装 Erlang 所以在安装rabbitMQ之前,需要先安装Erlang 。 小编使用的是 otp_win64_18.1 ,需要其他版本或者32位系统的,可以去 官网 下载。 全部点击“下一步”就行。 有的选择其他的安装方式,可能需要添加一下系统环境变量(正常安装的也要检查下): 有最好,没有的话就手动添加嘛。 2.安装 RabbitMQ 下载运行 rabbitmq-server-3.6.5 ,需要其他版本或者32位系统的,可以去 官网 下载。 依旧可以不改变默认进行安装。 需要注意:默认安装的RabbitMQ 监听端口是5672 3.配置 激活 RabbitMQ's Management Plugin 使用RabbitMQ 管理插件,可以更好的可视化方式查看Rabbit MQ 服务器实例的状态。 打开命令窗口: 输入命令: "C:\Program Files\RabbitMQ Server\rabbitmq_server-3.6.5\sbin\rabbitmq-plugins.bat" enable rabbitmq