RabbitMQ

PHP实现RabbitMQ消息队列

↘锁芯ラ 提交于 2020-08-05 18:06:11
先安装PHP对应的RabbitMQ,这里用的是 php_amqp 不同的扩展实现方式会有细微的差异. php扩展地址: http:// pecl.php.net/package/am qp 具体以官网为准 http://www. rabbitmq.com/getstarted .html 介绍 config.php 配置信息 BaseMQ.php MQ基类 ProductMQ.php 生产者类 ConsumerMQ.php 消费者类 Consumer2MQ.php 消费者2(可有多个) config.php <?php return [ //配置 'host' => [ 'host' => '127.0.0.1', 'port' => '5672', 'login' => 'guest', 'password' => 'guest', 'vhost'=>'/', ], //交换机 'exchange'=>'word', //路由 'routes' => [], ];  BaseMQ.php <?php /** * Created by PhpStorm. * User: pc * Date: 2018/12/13 * Time: 14:11 */ namespace MyObjSummary\rabbitMQ; /** Member * AMQPChannel *

mysql读写分离在项目实践中的应用

心已入冬 提交于 2020-08-05 17:03:42
工程背景介绍: 我们开发了一个万能接口,用户通过这个接口中传入数据,我们拿到数据进行复杂的逻辑处理然后再将数据各种匹配展示分发等操作,处理的流程相当庞大,接口中我们只保留了接收数据和返回一个本次请求的id的操作,其余操作都是异步到其他程序中处理的。 返回id的操作是需要和数据库进行两次连接,一次读库得到最新的id 然后把id更新到数据库。 项目出现问题: 我们以为自己的程序就像上图中的那样运行,一次请求,读库,写库,返回id,其余异步处理。但是没有考虑高并发,强压力写的性能问题,在高并发下,多个接口线程同事访问数据库,这样的情况会出现并发同步的问题,当然这点我们是考虑到了 ,使用线程锁可避免数据的幻读,重复读等。可一旦这样大量的接口线程堆积,很快服务器cpu将扛不住发生宕机! 那如果不试用线程同步锁呢,很明显不只是数据的错乱问题将发生,数据库在极大线程的访问压力下也将抗不住,cpu使用率达到85%!程序面临着瘫痪的风险。 解决方式: 1.数据库集群? 好处:增加数据库服务器,压力随之分摊到几个服务器中,减小数据库压力 坏处:硬件成本大 数据库主从问题 哈希一致性问题 单点故障问题 2.接口服务器集群 好处:访问压力被分摊到几个服务器中 线程的堆积问题得到有效解决 坏处:硬件成本大 单点故障问题 nignx负载均衡服务器的搭建 操作复杂 以上两种方案都是增加硬件成本,加大了开发难度

Spring Cloud: JWT加密 keytool生成jks文件

北慕城南 提交于 2020-08-05 16:12:04
通过keytool生成jks文件: 运行下面的命令生成私钥,姓名国家啥的可以不填 keytool -genkey -alias ffzs-jwt -keyalg RSA -keysize 1024 -keystore ffzs-jwt.jks -validity 365 -keypass ffzs00 -storepass ffzs00 在上面的命令中,-alias选项为别名,-keypass和-storepass为密码选项,-validity为配置jks文件的过期时间(单位:天)。 获取的jks文件作为私钥,是如何解密JWT的呢?这时就需要使用jks文件的公钥。获取jks文件的公钥命令如下: keytool -list -rfc --keystore ffzs-jwt.jks | openssl x509 -inform pem -pubkey 输入密码之后生成公钥可私钥 auth端修改: 这个不重要,我们将生成的ffzs-jwt.jks文件放到resources目录 修改jwtTokenEnhancer方法如下,通过jks文件获取公钥来生成token @Bean protected JwtAccessTokenConverter jwtTokenEnhancer ( ) { KeyStoreKeyFactory keyStoreKeyFactory = new

list类型的应用场景 —— Redis实战经验

你说的曾经没有我的故事 提交于 2020-08-05 13:28:44
     list类型是简单的字符串列表,按照插入顺序排序。每个列表最多可以存储 2 32 - 1 个元素(40多亿) ,list类型主要有以下应用场景。。   1. 消息队列   list类型的lpop和rpush(或者反过来,lpush和rpop)能实现队列的功能,故而可以用Redis的list类型实现简单的点对点的消息队列。不过我不推荐在实战中这么使用,因为现在已经有Kafka、NSQ、RabbitMQ等成熟的消息队列了,它们的功能已经很完善了,除非是为了更深入地理解消息队列,不然我觉得没必要去重复造轮子。   2. 排行榜   list类型的lrange命令可以分页查看队列中的数据。可将每隔一段时间计算一次的排行榜存储在list类型中,如京东每日的手机销量排行、学校每次月考学生的成绩排名、斗鱼年终盛典主播排名等,下图是酷狗音乐“K歌擂台赛”的昨日打擂金曲排行榜,每日计算一次,存储在list类型中,接口访问时,通过page和size分页获取打擂金曲。(打个小广告,酷狗音乐“K歌擂台赛”每天都能产生一批优质翻唱作品,对普通人优质歌声有兴趣的朋友不妨来听听)。         但是,并不是所有的排行榜都能用list类型实现,只有定时计算的排行榜才适合使用list类型存储,与定时计算的排行榜相对应的是实时计算的排行榜,list类型不能支持实时计算的排行榜

如何选择消息队列

牧云@^-^@ 提交于 2020-08-05 12:23:27
一、选择消息队列产品的基本标准 在消息队列的技术选型上,并不存在说哪个消息队列就是“最好的”。常用的几个消息队列,每个产品都有自己的优势和劣势,需要根据现有系统的情况,选择最适合的那款产品。 技术产品的及格标准: 必须是 开源产品 :如果遇到Bug至少有机会通过修改源代码迅速修复或规避,解决燃眉之急。 必须是近年来 比较流行 并且有一定 社区活跃度 的产品:流行的好处是,只要使用的场景不太冷门,遇到的Bug都可以找到解决办法。 流行的产品与 周边生态系统 会有一个比较好的集成和兼容:比如kafka和Flink就有比较好的兼容性,Flink内置了kafka的Data Sourse,使得你不用自己开发一个Flink的Data Source。 消息队列产品的及格标准: 消息的可靠传递:确保 不丢消息 。 Cluster:支持 集群 ,确保不会因为某个节点宕机导致服务不可用,当然也不能丢消息。 性能:具备足够好的性能,能 满足绝大多数场景 的性能要求。 二、可供选择的消息队列产品 1、RabbitMQ 介绍: 使用 Erlang语言编写 ,最早是为电信行业系统之间的可靠通讯性设计的,也是少数几个 支持AMQP 协议的消息队列。 轻量级 、迅速,开箱即用,非常容易部署和使用。 有一个特色的功能是支持非常 灵活的路由配置 。它在生产者和队列之间增加了一个 Exchange模块

Rabbitmq的安装与使用(Window10版本)

时光总嘲笑我的痴心妄想 提交于 2020-08-05 10:26:18
1、RabbitMQ的安装,rabbitmq为erlang语言开发,所以先安装erlang语言开发包,现在电脑一般都是64位的,所以下载64位的都行了。红色框可以选择版本,箭头选择64位的进行下载。下载和打开网页很慢,官网: http://www.erlang.org/downloads/20.0 2、下载好双击安装即可: 如果官网下载过慢,可以使用迅雷下载。 选择好目录: 这里我选择了默认: 安装如下所示: 3、配置环境变量: 在PATH后面加上如下所示即可:;%ERLANG_HOME%\bin; 4、安装Rabbitmq,然后配置环境变量: 官网下载地址: http://www.rabbitmq.com/install-windows.html 5、直接运行rabbitmq-server-3.5.2.exe,选择要安装的目录,进行安装: 默认安装的RabbitMQ 监听端口是5672。 配置环境变量: PATH最后追加如下所示:;%RABBITMQ_SERVER%\sbin; 6、激活Rabbit MQ's Management Plugin 使用Rabbit MQ管理插件,可以更好的可视化方式查看Rabbit MQ服务器实例的状态,你可以在命令行中使用下面的命令激活。 输入:rabbitmq-plugins.bat enable rabbitmq_management

物联网的基石-mqtt 协议初识

≡放荡痞女 提交于 2020-08-05 09:11:48
云栖号资讯:【 点击查看更多行业资讯 】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 随着 5G 时代的来临,万物互联的伟大构想正在成为现实。联网的 物联网设备 在 2018 年已经达到了 70 亿 1 ,在未来两年,仅智能水电气表就将超过10亿 2 。 海量的设备接入和设备管理对网络带宽、通信协议以及平台服务架构都带来了很大挑战。对于 物联网协议 来说,必须针对性地解决物联网设备通信的几个关键问题:其网络环境复杂而不可靠、其内存和闪存容量小、其处理器能力有限。 MQTT 协议 是基于发布/订阅模式的物联网通信协议,凭借简单易实现、支持 QoS、报文小等特点,占据了物联网协议的半壁江山: MQTT 协议的诞生 MQTT was created by Andy Stanford-Clark of IBM, and Arlen Nipper (then of Arcom Systems, later CTO of Eurotech).^3 据 Arlen Nipper 在一 IBM Podcast 上的自述,MQTT 原名是 MQ TT, 注意 MQ 与 TT之间的空格,其全称为: MQ Telemetry Transport,是九十年代早期,他在参与 Conoco Phillips 公司的一个原油管道数据采集监控系统(pipeline SCADA system)时

Spring Cloud (十五)Stream 入门、主要概念与自定义消息发送与接收

血红的双手。 提交于 2020-08-05 08:29:42
前言 不写随笔的日子仿佛就是什么都没有产出一般……上节说到要学Spring Cloud Bus,这里发现按照官方文档的顺序反而会更好些,因为不必去后边的章节去为当前章节去打基础,所以我们先学习Spring Cloud Stream,还有一个就是本文有很多官方文档的翻译以及《Spring Cloud 微服务实战》书中的内容和DD博客中的内容,可能会有杂糅的地方,望大家见谅。 代码详见: https://github.com/HellxZ/SpringCloudLearn 快速入门 五分钟左右为你展示如何创建一个Spring Cloud Stream的应用程序,它是如何从消息中间件中接收并输出接收的信息到console,这里的消息中间件有两种选择:RabbitMQ和Kafka,本文以RabbitMQ为准 这节主要简化官方文档为两步: 使用idea新建项目 添加 Message Handler , Building 并运行 一、使用idea新建项目 打开项目目录,新建一个moudle,名为FirstStream,pom文件如下 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001

Kafka与RabbitMQ的区别?

三世轮回 提交于 2020-08-05 02:00:39
1、Kafka和RabbitMQ在吞吐量的区别是什么? 一般情况下,RabbitMQ单机的吞吐率在万级别之内,而Kafka单机则比RabbitMQ高出一两个量级,可以达到十万级别,甚至可以达到百万级别。(/但吞吐率是受到硬件层面的限制的。比如网卡的宽带,如果宽带为1gb,要达到百万的吞吐量就相当于1gb / 8 / 100w = 134b,相当于每次的消息体大小不能超过13b,否则就不算是百万的吞吐量了/) 这是RabbitMQ和Kafka在吞吐量之间的区别。 2、Kafka和RabbitMQ在消息可靠性的区别是什么? (/消息的可靠性:是指对消息不丢失的保障程度;消息的可用性:是指无故障运行时间的百分比,通常用几个9来衡量。/) 使用消息中间件在传输消息的过程中会导致消息的丢失,也就是可靠性是每个中间件都会面临的问题;同时又会涉及到消息的可用性。 从微观方面来说,分布式系统结构是一致性协议理论的应用实现,对于消息中间件的可靠性和可用性吧区别的话可以根据它们的一致性协议来看; -Kafka采用的是类似PacificA的一致性协议,通过ISR (In-Sync-Replica) 来保证多副本之间的同步,并且支持强一致性语义(通过acks实现)。(/类似Pacific的一致性协议和ZAB都是基于实用主义,把 log replication日志赋值 和 Leader election

MQ系列(1)——rabbitMQ简介

泪湿孤枕 提交于 2020-08-04 23:58:59
前文我们学习了 MQ的相关知识,现在我们来学习一下实现了AMQP协议的 rabbitMQ 中间件。rabbitMQ 是使用 erlang 语言编写的中间件(erlang之父 19年4月去世的,很伟大一个程序员)。 rabbitMQ 的结构和的角色 学习rabbtMQ我们先要弄清楚这几个概念: exchange , queue , routing-key , binding-key , message , publisher , exchange , binding-key , Connection , Channel , consumer , broker ;下面对这些角色概念进行介绍。 消息的发送方被称作 publisher (生产者),而消息的接收方被称作 consumer (消费者),而消息队列服务器实体就是 broker (指 rabbitMQ );消费者或者生产者对rabbitMQ的一个连接被称作 Connection (连接),在rabbit的连接模型中,为了提高连接传输效率,采用了 Channel (管道)这种方式实现多路复用,类似于Nio中的模型;我们知道建立一个TCP连接代价很大,因此TCP连接建立后最好不要断开 Connection - Channel 连接模型就是为了达到这种目的;一个消费者(生产者)使用一个 channel 消费(发送)消息,而多个