RabbitMQ

Spring Cloud Stream 构建消息驱动的微服务

老子叫甜甜 提交于 2020-08-17 16:38:41
学习在 Spring Cloud 中使用 Stream 构建消息驱动的微服务,包括基本使用、自定义消息通道、消息分组、消息分区、定时任务等功能。 1 概述 Spring Cloud Stream 提供了一个微服务和消息中间件之间的粘合剂,这个粘合剂叫做 Binder , Binder 负责与消息中间件进行交互。而开发者则通过 inputs 或者 outputs 这样的消息通道与 Binder 进行交互。 2 基本使用 创建 Spring Boot 项目 spring-cloud-stream ,添加 Web/RabbitMQ/Cloud Stream 依赖,如下: 最终的依赖如下: <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud<

高并发,你真的了解吗?

百般思念 提交于 2020-08-17 15:46:52
摘要: 本文介绍高并发系统的度量指标,讲述高并发系统的设计思路,再梳理高并发的关键技术,最后结合作者的经验做一些延伸探讨。 当前,数字化在给企业带来业务创新,推动企业高速发展的同时,也给企业的IT软件系统带来了严峻的挑战。面对流量高峰,不同的企业是如何通过技术手段解决高并发难题的呢? 0、引言 软件系统有三个追求: 高性能、高并发、高可用 ,俗称三高。三者既有区别也有联系,门门道道很多,全面讨论需要三天三夜,本篇讨论高并发。 高并发(High Concurrency) 。并发是操作系统领域的一个概念,指的是一段时间内多任务流交替执行的现象,后来这个概念被泛化,高并发用来指大流量、高请求的业务情景,比如春运抢票,电商双十一,秒杀大促等场景。 很多程序员每天忙着搬砖,平时接触不到高并发,哪天受不了跑去面试,还常常会被面试官犀利的高并发问题直接KO,其实吧,高并发系统也不高深,我保证任何一个智商在线的看过这篇文章后,都能战胜恐惧,重拾生活的信心。 本文先介绍高并发系统的度量指标,然后讲述高并发系统的设计思路,再梳理高并发的关键技术,最后结合作者的经验做一些延伸探讨。 1、高并发的度量指标 既然是高并发系统,那并发一定要高,不然就名不副实。并发的指标一般有 QPS、TPS、IOPS ,这几个指标都是可归为 系统吞吐率 ,QPS越高系统能hold住的请求数越多,但光关注这几个指标不够

RabbitMQ 延迟队列-基于PHP实现

妖精的绣舞 提交于 2020-08-17 14:05:53
安装 RabbitMQ 延迟队列插件 RabbitMQ 延迟队列插件未安装直接使用的话,会报错: unknown exchange type 'x-delayed-message' 插件下载地址:https://www.rabbitmq.com/community-plugins.html 。下载 Erlang 可执行文件之后,复制到rabbit服务的插件目录(自己的安装目录,我的是 C:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.14\plugins )中,然后开启插件服务: rabbitmq-plugins enable rabbitmq_delayed_message_exchange 测试步骤 创建测试项目的目录 mq 从 https://github.com/php-amqplib/php-amqplib 下载AMQP库(当然也可以通过 composer 安装,这里为了简单直接自己处理了),放入 mq 目录 编写 index.php,实现自动加载 创建 test 目录,里面分别创建 mqc.php 消费者和 mqp.php 生产者两个文件 跑脚本,测试消息的生产和消费: php -f index.php delayP p 3 生产消息,延时3秒 php -f index.php delayC c 消费消息 目录结构

Docker初探之Windows篇

梦想与她 提交于 2020-08-17 05:56:26
一、什么是Docker? Docker是一个开源的应用容器引擎,可以轻松地为任何应用创建一个轻量级、可移植、自给自足的容器。开发者在本地编译测试通过的容器可以批量地在生产环境中部署,包括虚拟机和其他平台。 我们可以将自己的应用以及依赖的环境一起打包到一个容器中,然后这个容器就可以很容易的放到其他机器上运行。而且非常易于装载、复制、移除。 以前的部署方式就是每次部署应用的时候都需要在电脑上重复地走一下部署流程,比如下载安装环境、依赖框架、搭建服务等。但是有了Docker容器技术,我们无需重复的操作,只需要一次打包,处处运行,而且每个容器之间都是隔离的环境,互不影响。 二、虚拟机和Docker对比 在上图中,容器是一个应用层抽象,用于将代码和依赖资源打包在一起。多个容器可以在同一台机器上运行,共享操作系统内核,但各自作为独立的进程在用户空间中运行。与虚拟机相比,容器占用的空间较少,瞬间就能完成启动。 虚拟机则是一个物理硬件层抽象,用于将一台服务器变成多台服务器,管理程序允许多个虚拟机在一台机器上运行,每个虚拟机都包含一个独立的操作系统、一个或多个应用、必要的二进制文件和资源库。因此占用大量空间,启动也十分缓慢。 由于容器所需要的资源要比虚拟机少(虚拟机需要一个完整的系统环境),所以它们易于部署且快速启动。 特性 容器 虚拟机 启动速度 秒级 几秒内就可以启动 分钟级

centos 7安装rabbitmq

狂风中的少年 提交于 2020-08-17 03:26:54
rabbitmq依赖erlang所以先安装erlang rabbitmq对erlang的版本有要求,先去官网看一下对应版本要求: https://www.rabbitmq.com/which-erlang.html 一、安装erlang 1.下载erlang安装包,去erlang官网下载 2.安装 1)安装依赖模块:yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel 2)将安装包解压 ./configure --prefix=/opt/erlang --with-ssl --enable-threads --enable-smp-support --enable-kernel-poll --enable-hipe报错的话执行 sudo yum install unixODBC-devel openssl-devel ncurses-devel 3)编译 make && make install 4)配置环境变量 vim /etc/profile 加一行 export PATH=$PATH: 路径/bin 保存编译source /etc/profile 5)erl 测试是否安装成功。如图 二、安装rabbitmq 1.官网下载安装包: https://github.com

记近一年线上项目经验及架构变更记录

馋奶兔 提交于 2020-08-17 02:19:42
简介 M 项目, 是一个电子社保业务系统,2019.8 月团队接手了这个项目的开发工作,到 2020.7 月客户的业务量翻了4倍,工作日同时在线员工数量40人,以下记录总结 2019.8-至今项目的架构变化,以及项目中积累的一些经验。 [2019.8] 项目接手后的初始架构 物理架构 M 项目的原始物理架构非常的简单,属于最简单的单机单体系统,大部分服务都寄宿在一台双核,8G 内存的虚拟机中(包含 MySQL 数据库服务和文件存储服务),只有邮件发送服务使用的是第三方服务 SendGrid 。相对于客户最多 10 人同时在线的需求,日均 300 张发票的业务场景,此虚拟机的配置和物理架构足够支撑客户的业务。 逻辑架构 项目初期的逻辑架构也非常简单,有 2 个可用站点,分别是业务系统站点 Gateway 和项目宣传站点 Portal 。所有的业务都封装在 Gateway API 中。数据持久化使用了单机版的 MySQL 实例。 其中 Gateway API 是项目的核心部分,程序的所有业务代码都集中于此,小到发送邮件,创建 PDF, 大到提交发票,社保索赔,支付订单都放置与此。这种设计方式很适合初期堆功能,虽然后期客户发展,这种设计造成了很大的问题,但是在项目初期,我觉着这种方式还是非常适合帮助客户快速拓展业务的。 在逻辑架构上,我觉着唯一存在问题就是 Gateway API

Spring AMQP

醉酒当歌 提交于 2020-08-16 14:08:28
学习目标 会使用Spring AMQP 利用MQ实现搜索和静态页面的数据同步 1、简介 Sprin有很多不同的项目,其中就有对AMQP的支持: Spring AMQP的页面: http://projects.spring.io/spring-amqp/ 注意这里一段描述: ​ Spring-amqp是对AMQP协议的抽象实现,而spring-rabbit 是对协议的具体实现,也是目前的唯一实现。底层使用的就是RabbitMQ。 1.2.依赖和配置 添加AMQP的启动器: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> 在 application.yml 中添加RabbitMQ地址: spring: rabbitmq: host: 192.168.56.101 username: leyou password: leyou virtual-host: /leyou 1.3.监听者 在SpringAmqp中,对消息的消费者进行了封装和抽象,一个普通的JavaBean中的普通方法,只要通过简单的注解,就可以成为一个消费者。 @Component public class Listener {

2020年的秋招已经开始了!最新Java面试题大全(文末附参考答案)送给大家

我与影子孤独终老i 提交于 2020-08-16 11:27:09
包含的模块 本文分为十九个模块,分别是:Java 基础、容器、多线程、反射、对象拷贝、Java Web 、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、MyBatis、RabbitMQ、Kafka、Zookeeper、MySQL、Redis、JVM 共包含 208 道面试题,本文的宗旨是为读者朋友们整理一份详实而又权威的面试清单,下面一起进入主题吧。 一. Java 基础模块 1.JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,Java 开发工具包,提供了 Java 的开发环境和运行环境。 JRE:Java Runtime Environment 的简称,Java 运行环境,为 Java 的运行提供了所需环境。 具体来说 JDK 其实包含了 JRE,同时还包含了编译 Java 源码的编译器 Javac,还包含了很多 Java 程序调试和分析的工具。简单来说:如果你需要运行 Java 程序,只需安装 JRE 就可以了,如果你需要编写 Java 程序,需要安装 JDK。 2.== 和 equals 的区别是什么? == 解读: 对于基本类型和引用类型 == 的作用效果是不同的,如下所示: 基本类型:比较的是值是否相同; 引用类型:比较的是引用是否相同; 代码示例

Linux下安装erlang及rabbitmq

[亡魂溺海] 提交于 2020-08-16 06:01:18
Linux下安装erlang及rabbitmq 安装erlang 下载Erlang安装包 http://erlang.org/download/otp_src_20.3.tar.gz 上传到服务器tmp目录下,进入到tmp目录进行安装。 # cd /tmp # mkdir -p /usr/local/erlang # tar -xzvf otp_src_20.1 .tar.gz # cd otp_src_20.1 # ./configure --prefix=/usr/local/erlang --with-ssl --enable-threads --enable-smp-support --enable-kernel-poll --enable-hipe --without- javac # make - j8 # make install 设置环境变量 # vim /etc/profile 在末尾加入以下内容: #set erlang environment export PAHT=$PATH:/usr/local/erlang/bin 使环境变量生效 # source /etc/profile 测试erlang是否可用以及变量是否生效 # erl 展示以下内容说明生效 安装rabbitmq 下载rabbitmq-server安装包 http://www.rabbitmq

消息中间件(三) 之 RabbitMQ延迟队列

风格不统一 提交于 2020-08-16 03:48:23
延迟任务 什么是延迟任务 需要延迟一段时间才需要处理的任务. 比如订单关闭, 电商平台一般会给用户30分钟左右交钱时间, 当超时未交钱就需要关闭订单. 订单的延时关闭就是一种延迟任务. 怎么实现延迟任务 定时任务 最普遍的做法应该就是定时任务了, 比如订单关闭例子, 我们会将订单存储在表中, 通过定时任务定时扫表, 比如10分钟一次, 对扫描结果进行时间处理, 如果是超时订单则执行关闭操作. 定时任务实现简单, 缺点是时间延迟时间不准确, 在订单例子中, 如果第一次扫描发现订单为29分钟未支付, 那么该订单只能在第二次扫描时执行关闭, 此时订单已经是39分钟未支付了. 为了提供时间准确性, 我们可以减少定时任务时间, 比如一分钟一次. 时间越短准确性越高, 但是资源消耗的也越多. RabbitMQ延迟队列 RabbitMQ本身没有延迟队列的概念, 但是它在处理死信时使用了类似的功能. 当队列中出现死信, 我们可以让它路由到指定的队列中, 然后再消费该队列消息, 达到延迟功能. 那么什么是死信 dead-lettered message? 官网解释在以下三种情况下message可以成为dead-lettered message 1 The message is negatively acknowledged by a consumer using basic.reject or