RabbitMQ

PHP(Mysql/Redis)消息队列的介绍及应用场景案例

邮差的信 提交于 2020-04-09 18:32:05
在进行网站设计的时候,有时候会遇到给用户大量发送短信,或者订单系统有大量的日志需要记录,还有做秒杀设计的时候,服务器无法承受这种瞬间的压力,无法正常处理,咱们怎么才能保证系统正常有效的运行呢?这时候我们就要引用消息队列来实现这类的需求,这时候就需要一个中间的系统进行分流和解压。消息队列就是一个中间件,需要配合其他合理使用。 消息队列的概念、原理和场景 本质上讲,消息队列结构就是一个队列结构的中间件 ,也就是说把消息和内容放入这个容器之后,就可以直接的返回,不需要等它后期处理的结果,另外会有一个程序会读取这些数据,并按照顺序进行逐个的处理,也就是说按照并发非常大的一个环节的时候,同时呢你又不需要立即获得这个环节的返回结果,那么使用消息队列可以比较好的解决这个问题。一个经典的消息队列结果应该是这样的过程: 由一个业务系统进行入队,把消息逐个插入消息队列中,插入成功之后直接返回成功的结果,然后后续有一个消息处理系统,这个系统会把消息队列中的记录逐个进行取出并且进行处理,进行出队的操作。 消息系统适合的场景 冗余 首先数据需要冗余的时候,比如经常做订单系统,后续需要严格的转换和记录,消息队列可以把这些数据持久化存储在队列中,然后由订单处理程序进行获取,后续处理完成之后再把这条记录删除,保证每条记录都能处理完成。 解耦 消息队列分离了两套系统,解决了两套系统深度耦合的问题。使用消息队列后

Linux系统安装RabbitMQ详细教程

房东的猫 提交于 2020-04-08 08:00:30
1、安装Erlang 安装类库 yum -y install ncurses-devel yum -y install openssl-devel yum -y install unixODBC-devel yum -y install gcc-c++ 准备安装包otp_src_18.2.1.tar.gz,解压,配置、编译并安装 ./configure --prefix=/hwd/software/erlang make make install 配置环境变量 编辑 vim /etc/profile 添加: export ERLANG_HOME=/hwd/software/erlang export PATH=$ERLANG_HOME/bin:$PATH 使文件生效: source profile 测试 2、安装RabbitMQ 准备安装包rabbitmq-server-generic-unix-3.6.9.tar.xz,解压 xz -d rabbitmq-server-generic-unix-3.6.9.tar.xz tar -xvf rabbitmq-server-generic-unix-3.6.9.tar 启动插件 ./rabbitmq-plugins enable rabbitmq_management 启动服务 ./rabbitmq-server -detached

大话业务场景与解决方案-做任务

∥☆過路亽.° 提交于 2020-04-07 12:22:18
背景 多数的移动端APP都会有做任务领取奖励的功能模块,这类需求的目的是培养用户使用习惯,提升用户活跃性,用户完成任务获得积分奖励,通过积分兑换商品或者充值话费,微信体现等。 拟定需求场景(如图↓),概要:APP底部导航中新增小任务Tab,点击Tab可查看任务完成进度和领取情况,点击去完成跳转到做任务的业务界面,当用户完成任务并且满足领取条件的时候,任务Tab需要红点提醒用户当前有奖励可领取,用户领取后并且当前没有待领取奖励小红点消失,任务完成进度和领取状态仅保持当天,隔天刷新。 业务分析 在开发前需要对需求进行整理,对细节进行确认,然后设计解决方案,预估开发时间,这里将对于业务中核心的内容进行梳理: 用户想要完成任务,需要去操作其他业务功能,如:评论成功后需要完成每日评论任务,关注主题后完成关注新手任务,这里就涉及核心问题, 任务需要依赖于其他业务 为了保障后续拓展性, 任务需要支持后台管理 ,配置任务名,描述,任务类型(每日,新手,活动),完成次数,奖励积分数量,去完成跳转uri 等 用户完成任务后不用自动领取奖励,需要进入到任务列表点击领取操作,可领取时导航Tab需要小红点提醒,和产品确认任务的完成和提醒的用户体验 可以接受短时间延迟 用户多次操作业务,或者出现重复操作(恶意并发请求刷积分),保证任务只能完成一次并且只能领取一次奖励, 需要保证幂等性 方案设计 核心目标:

大话业务场景与解决方案-做任务

假装没事ソ 提交于 2020-04-07 09:54:21
背景 多数的移动端APP都会有做任务领取奖励的功能模块,这类需求的目的是培养用户使用习惯,提升用户活跃性,用户完成任务获得积分奖励,通过积分兑换商品或者充值话费,微信体现等。 拟定需求场景(如图↓),概要:APP底部导航中新增小任务Tab,点击Tab可查看任务完成进度和领取情况,点击去完成跳转到做任务的业务界面,当用户完成任务并且满足领取条件的时候,任务Tab需要红点提醒用户当前有奖励可领取,用户领取后并且当前没有待领取奖励小红点消失,任务完成进度和领取状态仅保持当天,隔天刷新。 业务分析 在开发前需要对需求进行整理,对细节进行确认,然后设计解决方案,预估开发时间,这里将对于业务中核心的内容进行梳理: 用户想要完成任务,需要去操作其他业务功能,如:评论成功后需要完成每日评论任务,关注主题后完成关注新手任务,这里就涉及核心问题, 任务需要依赖于其他业务 为了保障后续拓展性, 任务需要支持后台管理 ,配置任务名,描述,任务类型(每日,新手,活动),完成次数,奖励积分数量,去完成跳转uri 等 用户完成任务后不用自动领取奖励,需要进入到任务列表点击领取操作,可领取时导航Tab需要小红点提醒,和产品确认任务的完成和提醒的用户体验 可以接受短时间延迟 用户多次操作业务,或者出现重复操作(恶意并发请求刷积分),保证任务只能完成一次并且只能领取一次奖励, 需要保证幂等性 方案设计 核心目标:

消息队列如何利用标签实现消息过滤

大城市里の小女人 提交于 2020-04-07 07:27:20
场景介绍 一个消息队列(MQ)存储的消息,可以包含不同实际用途。如果这些消息不加区分,消费者每次消费都会按顺序拉取消息,直到完成对所有消息的消费。如果消费者只对某一类型的消息感兴趣,那么将所有消息都消费一遍必会影响消费者处理效率。 解决方案 分布式消息服务DMS 是稳定可靠的消息队列服务,提供普通队列、有序队列、Kafka、ActiveMQ、RabbitMQ,兼容HTTP、TCP、AMQP协议,应用于系统解耦、异步通信、流量削峰去谷、第三方集成等场景。DMS提供消息标签的能力,支持生产者为每条消息提供一个或多个标签(tag)。标签(tag)是用来区分某个 消息队列(MQ) Topic 下的消息分类,通常情况下,标签(tag)可以用来区分同一个 Topic 下相互关联的消息,就像全集和子集的关系,流程先后的关系。消费者则根据标签(tag)的内容来过滤消息,确保每个消费者最终只会消费到它感兴趣的消息类型,提高消息消费效率。 以金融交易场景为例,在一种交易中可能会产生多种类型的消息,如股票(stock),基金(fund),贷款(loan)等。这些消息会通过交易(business)Topic发送到business_Topic 的队列(MQ)中,并传递给不同的处理系统,如股票系统,基金系统,贷款系统,实时分析系统等。然而基金系统只关心基金类型的消息,而实时分析系统可能需要获取到所有类型的消息

【Spring Boot】19.集成消息

删除回忆录丶 提交于 2020-04-06 22:38:12
消息服务简介 大多应用中,可通过消息服务中间件来提升系统异步通信、扩展解耦能力 具体而言,主要的应用模式有: 异步处理 应用解耦 流量削峰(例如:京东秒杀) 消息服务中两个重要概念 消息代理(message broker) 目的地(destination) 当消息发送者发送消息以后,将由消息代理接管,消息代理保证消息传递到指定目的地。 消息通信机制 消息队列主要有两种形式的目的地 队列(queue):点对点消息通信(point-to-point) 主题(topic):发布(publish)/订阅(subscribe)消息通信 (1)点对点式 消息发送者发送消息,消息代理将其放入一个队列中,消息接收者从队列中获取消息内容,消息读取后被移出队列。也就是说,消息一旦被消费,那么立马删除。 消息只有唯一的发送者和接受者,但并不是说只能有一个接收者 (2)发布订阅式 发送者(发布者)发送消息到主题,多个接收者(订阅者)监听(订阅)这个主题,那么就会在消息到达时同时收到消息。 消息服务规范 JMS(Java Message Service)JAVA消息服务: 基于JVM消息代理的规范。ActiveMQ、HornetMQ是JMS实现 AMQP(Advanced Message Queuing Protocol) 高级消息队列协议,也是一个消息代理的规范,兼容JMS

Spring Boot与消息(JMS、AMQP、RabbitMQ)

左心房为你撑大大i 提交于 2020-04-06 22:00:15
1.概述。 大多应用中,可通过消息服务中间件来提升系统 异步通信 、扩展 解耦能力 。 消息服务中两个重要概念: 消息代理(message broker)和目的地(destination)。 当消息发送者发送消息以后,将由消息代理接管,消息代理保证消息传递到指定目的地。 消息队列主要有两种形式的目的地 : 队列 (queue):点对点消息通信(point-to-point) 主题 (topic):发布(publish)/订阅(subscribe)消息通信 点对点式: 消息发送者发送消息,消息代理将其放入一个队列中,消息接收者从队列中获取消息内容,消息读取后被移出队列 消息只有唯一的发送者和接受者,但并不是说只能有一个接收者 发布订阅式: 发送者(发布者)发送消息到主题,多个接收者(订阅者)监听(订阅)这个主题,那么就会在消息到达时同时收到消息 JMS(Java Message Service)JAVA消息服务: 基于JVM消息代理的规范。ActiveMQ、HornetMQ是JMS实现 AMQP(Advanced Message Queuing Protocol): 高级消息队列协议,也是一个消息代理的规范,兼容JMS RabbitMQ是AMQP的实现 Spring支持 spring-jms提供了对JMS的支持 spring-rabbit提供了对AMQP的支持

Spring Boot RabbitMQ 异常

牧云@^-^@ 提交于 2020-04-06 19:54:24
1、WARN ◊com.rabbitmq.client.impl.ForgivingExceptionHandler - An unexpected connection driver error occured (Exception message: Socket closed) 原因:是你的配置文件配置问题,我的情况是把vhost配置错误,正确的应该是rabbitmq.vhost=xxx,我给写成了rabbitmq.vhost=/xxx, 多了一个斜杠,悲催啊,搞了好几个小时 来源: oschina 链接: https://my.oschina.net/u/1261699/blog/2991537

RabbitMQ小记(二)

喜夏-厌秋 提交于 2020-04-06 19:46:35
1、RabbitMQ相关介绍 (1)RabbitMQ整体上是一个生产者和消费者模型,主要负责接收、存储、转发消息。RabbitMQ整体结构图如下:   (2)生产者:发送消息的一方,生产者创建一条消息,发布到RabbitMQ上,消息一般分为两部分:消息体和标签,消息体是带有业务逻辑结构的数据,也可以进一步对消息体进行序列化,标签用来描述这条消息。    消费者:接收消息的一方,消费者创建一条连接,接到RabbitMQ服务器上的队列上,当消费者消费一条队列上的消息时,只是消费消息体,标签自动丢弃,所以消费者不会知道生产者是谁。    Broker:消息中间服务节点,一个RabbitMQ Broker可以看作是一个RabbitMQ的实例,也可看作一台rabbitMQ的服务器。    队列:Queue,RabbitMQ的内部对象,用于存储消息。多个消费者可以订阅一个队列,不支持队列层面的广播消费。    交换器:Exchange,生产者创建消息,把消息交给交换器,有交换器把消息发送到一个或多个队列上。如果交换器发送队列失败,消息会返回给生产者或者丢弃。RabbitMQ中交换器有四种类型:fanout、direct、topic、headers。    fanout:四种交换器中其一,会把消息发送到所有与交换器绑定的队列上。    direct:四种交换器其二

RabbitMQ学习:安装RabbitMQ及RabbitMQ的初步配置(一)

蹲街弑〆低调 提交于 2020-04-06 17:27:07
RabbitMQ基础含义 RabbitMQ是一种消息中间件,用于处理来自客户端的异步消息。服务端将要发送的消息放入到队列池中。接收端可以根据RabbitMQ配置的转发机制接收服务端发来的消息。RabbitMQ依据指定的转发规则进行消息的转发、缓冲和持久化操作,主要用在多服务器间或单服务器的子系统间进行通信,是分布式系统标准的配置。 1、离线安装 下载离线安装包文件 链接: https://pan.baidu.com/s/1akc-vbTrgbtsIDi1TsWofA 提取码:04s2 上传离线安装包 rabbitmq-install 目录上传到 /root 切换到rabbitmq-install目录 cd rabbitmq-install 安装 rpm -ivh *.rpm 2、在线安装 确保yum安装成功 如果还没有安装yum -- 在linux--CentOS系统中添加阿里的yum源 安装步骤 rpm --import https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc # centos7 用这个 cat <<EOF > /etc/yum.repos.d/rabbitmq.repo [bintray-rabbitmq-server]