路由模式

Rabbit MQ和Spring Boot的整合

我的未来我决定 提交于 2020-01-26 13:20:31
/*--> */ /*--> */ 消息服务 背景 : 有时需与其它系统集成来完成相关业务功能 ,原始的做法是程序内部相互调用,除此之外,还可 用消息服务中间件来进行业务处理 ,使 用消息服务中间件处理业务能够提升系统的异步通信和扩展解耦的能力,个人有点面向切面的意思 。 一 . 为什么要使用消息服务 ? 因为 它有很多好处,能解决很多问题; 1. 异步处理 2.流量消峰 3.提高效率和可靠性 二、RabbitMQ 消息中间件的原理和工作模式 RabbitMQ 消息中间件的原理: 1. 消息发布者 P 向 RabbitMQ 代理( Broker )指定虚拟主机服务器发送消息。 2. 虚拟主机服务器内部交换器接收消息,并将消息传递并存储到与之邦定的消息队列中。 3. 消息消费者通过网络连接与消息代理建立连接。并且为了简化开发,在连接内部使用了多路复用的信道进行消息的最终消费。 消息中间件的工作模式的分类、具体的实现步骤、适用场景 工作模式:Publish/Subscrib (发布订阅模式) step1. 先配置一个 fanout 类型的交换器。 step2. 不需指定对应的路由键,同时会将消息路由到每一个消息队列。 step3. 每个队列都可以对不同的消息进行接收存储,进而各自消息队列关联的消费者进行消费。 适用场景:相同业务功能处理的场合。如用户注册成功后

rabbitmq-01

女生的网名这么多〃 提交于 2020-01-23 22:50:43
MQ 全称为 Message Queue ,即消息队列, RabbitMQ 是由 erlang 语言开发,基于 AMQP ( Advanced Message Queue 高级消息队列协议)协议实现的消息队列,它是一种应用程序之间的通信方法,消息队列在分布式系统开 发中应用非常广泛 应用场景 1 、任务异步处理。 将不需要同步处理的并且耗时长的操作由消息队列通知消息接收方进行异步处理。提高了应用程序的响应时间。 2 、应用程序解耦合 MQ 相当于一个中介,生产方通过 MQ 与消费方交互,它将应用程序进行解耦合 Jms和AMQP区别 JMS 是 java 提供的一套消息服务 API 标准,其目的是为所有的 java 应用程序提供统一的消息通信的标准,类似 java 的 jdbc ,只要遵循 jms 标准的应用程序之间都可以进行消息通信。它和 AMQP 有什么 不同, jms 是 java 语言专属的消 息服务标准,它是在 api 层定义标准,并且只能用于 java 应用;而 AMQP 是在协议层定义的标准,是跨语言的 Broker :消息队列服务进程,此进程包括两个部分: Exchange 和 Queue 。 Exchange :消息队列交换机,按一定的规则将消息路由转发到某个队列,对消息进行过虑。 Queue :消息队列,存储消息的队列,消息到达队列并转发给指定的消费方。

RabbitMQ安装与原理详解

人走茶凉 提交于 2020-01-18 02:40:32
文章目录 一、概述 1. 什么是消息队列 2. 为什么要使用消息队列 3. RabbitMQ特点 二、安装 1. 安装Erlang 2. 安装RabbitMQ 三、RabbitMQ 1. 启动和关闭 2. 插件管理 3. 用户管理 4. 权限管理 5. vhost管理 6. 设置管理员权限 四、消息发送和接收 1. RabbitMQ消息发送和接收机制 2. AMQP 中的消息路由 3. Exchange与Queue关联绑定 4. Exchange 类型 (1)direct (2)fanout (3)topic 5. Client与Brocker进行连接 五、RabbitMQ镜像集群 1. 准备 2. 配置Cookie文件 3. 配置hosts文件 4. 组建集群 5. 节点类型 一、概述 1. 什么是消息队列 消息(Message)是指在应用间传送的数据。消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。 消息队列(Message Queue)是一种应用间的通信方式,消息发送后可以立即返回,由消息系统来确保消息的可靠传递。消息发布者只管把消息发布到 MQ 中而不用管谁来取,消息使用者只管从 MQ 中取消息而不管是谁发布的。这样发布者和使用者都不用知道对方的存在。 2. 为什么要使用消息队列 从上面的描述中可以看出消息队列是一种应用间的 异步协作机制

负载均衡基本原理与lvs

心已入冬 提交于 2020-01-16 08:54:57
前言:   之前在山西的项目上使用的是lvs下的NAT模式,但另外两个模式并没有涉及,今天系统的整理下关于负载均衡的相关理论与lvs各模式的相关优点与不足,知其然与所以然,而后能针对性的应用: 基本介绍 1.1 负载均衡的由来 在业务初期,我们一般会先使用单台服务器对外提供服务。随着业务流量越来越大,单台服务器无论如何优化,无论采用多好的硬件,总会有性能天花板,当单服务器的性能无法满足业务需求时,就需要把多台服务器组成集群系统提高整体的处理性能。不过我们要使用统一的入口方式对外提供服务,所以需要一个流量调度器通过均衡的算法,将用户大量的请求均衡地分发到后端集群不同的服务器上。这就是我们后边要说的 负载均衡。 1.2 负载均衡的优点 提高了服务的整体性能 提高了服务的扩展性 提高了服务的高可用性 1.3 负载均衡的类型 广义上的负载均衡器大概可以分为 3 类,包括:DNS 方式实现负载均衡、硬件负载均衡、软件负载均衡。 1.3.1 DNS负载均衡 DNS 实现负载均衡是最基础简单的方式。一个域名通过 DNS 解析到多个 IP,每个 IP 对应不同的服务器实例,这样就完成了流量的调度,虽然没有使用常规的负载均衡器,但也的确完成了简单负载均衡的功能。 通过 DNS 实现负载均衡的方式的优点: 实现简单,成本低,无需自己开发或维护负载均衡设备, 通过 DNS 实现负载均衡的方式的缺点:

构建单页Web应用

房东的猫 提交于 2020-01-04 03:16:13
构建单页Web应用 摘自 前端农民工的博客 让我们先来看几个网站: coding teambition cloud9 注意这几个网站的相同点,那就是在浏览器中,做了原先“应当”在客户端做的事情。它们的界面切换非常流畅,响应很迅速,跟传统的网页明显不一样,它们是什么呢?这就是单页Web应用。 所谓单页应用,指的是在一个页面上集成多种功能,甚至整个系统就只有一个页面,所有的业务功能都是它的子模块,通过特定的方式挂接到主界面上。它是AJAX技术的进一步升华,把AJAX的无刷新机制发挥到极致,因此能造就与桌面程序媲美的流畅用户体验。 其实单页应用我们并不陌生,很多人写过ExtJS的项目,用它实现的系统,很天然的就已经是单页的了,也有人用jQuery或者其他框架实现过类似的东西。用各种JS框架,甚至不用框架,都是可以实现单页应用的,它只是一种理念。有些框架适用于开发这种系统,如果使用它们,可以得到很多便利。 开发框架 ExtJS可以称为第一代单页应用框架的典型,它封装了各种UI组件,用户主要使用JavaScript来完成整个前端部分,甚至包括布局。随着功能逐渐增加,ExtJS的体积也逐渐增大,即使用于内部系统的开发,有时候也显得笨重了,更不用说开发以上这类运行在互联网上的系统。 jQuery由于偏重DOM操作,它的插件体系又比较松散,所以比ExtJS这个体系更适合开发在公网运行的单页系统

Django中请求的生命周期

人走茶凉 提交于 2020-01-03 00:06:28
Django中请求的生命周期 1. 概述 首先我们知道HTTP请求及服务端响应中传输的所有数据都是字符串. 在Django中,当我们访问一个的url时,会通过路由匹配进入相应的html网页中. Django的请求生命周期是指当用户在浏览器上输入url到用户看到网页的这个时间段内,Django后台所发生的事情 而Django的生命周期内到底发生了什么呢?? 1. 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端 请求头和请求体中会包含浏览器的动作(action),这个动作通常为get或者post,体现在url之中. 2. url经过Django中的wsgi,再经过Django的中间件,最后url到过路由映射表,在路由中一条一条进行匹配, 一旦其中一条匹配成功就执行对应的视图函数,后面的路由就不再继续匹配了. 3. 视图函数根据客户端的请求查询相应的数据.返回给Django,然后Django把客户端想要的数据做为一个字符串返回给客户端. 4. 客户端浏览器接收到返回的数据,经过渲染后显示给用户. 视图函数根据客户端的请求查询相应的数据后.如果同时有多个客户端同时发送不同的url到服务端请求数据 服务端查询到数据后,怎么知道要把哪些数据返回给哪个客户端呢?? 因此客户端发到服务端的url中还必须要包含所要请求的数据信息等内容. 例如, http://www.aaa

django请求的生命周期

谁说胖子不能爱 提交于 2020-01-03 00:06:15
1. 概述 首先我们知道HTTP请求及服务端响应中传输的所有数据都是字符串. 在Django中,当我们访问一个的url时,会通过路由匹配进入相应的html网页中. Django的请求生命周期是指当用户在浏览器上输入url到用户看到网页的这个时间段内,Django后台所发生的事情 而Django的生命周期内到底发生了什么呢?? 1. 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端 请求头和请求体中会包含浏览器的动作(action),这个动作通常为get或者post,体现在url之中. 2. url经过Django中的wsgi,再经过Django的中间件,最后url到过路由映射表,在路由中一条一条进行匹配, 一旦其中一条匹配成功就执行对应的视图函数,后面的路由就不再继续匹配了. 3. 视图函数根据客户端的请求查询相应的数据.返回给Django,然后Django把客户端想要的数据做为一个字符串返回给客户端. 4. 客户端浏览器接收到返回的数据,经过渲染后显示给用户. 视图函数根据客户端的请求查询相应的数据后.如果同时有多个客户端同时发送不同的url到服务端请求数据 服务端查询到数据后,怎么知道要把哪些数据返回给哪个客户端呢?? 因此客户端发到服务端的url中还必须要包含所要请求的数据信息等内容. 例如, http://www.aaa.com/index/?nid

Django之路由层

﹥>﹥吖頭↗ 提交于 2019-12-22 00:42:10
一、简单的路由配置 from django.conf.urls import url from . import views urlpatterns = [ url(r'^articles/2003/$', views.special_case_2003), url(r'^articles/([0-9]{4})/$', views.year_archive), url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive), url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail), ] 注意: 若要从URL 中捕获一个值,只需要在它周围放置一对圆括号。 不需要添加一个前导的反斜杠,因为每个URL 都有。例如,应该是 ^articles 而不是 ^/articles 。 每个正则表达式前面的'r' 是可选的但是建议加上。它告诉Python 这个字符串是“原始的” —— 字符串中任何字符都不应该转义 示例: ''' 一些请求的例子: /articles/2005/03/ 请求将匹配列表中的第三个模式。Django 将调用函数views.month_archive(request, '2005', '03')。 /articles

Django中的路由系统:urls

杀马特。学长 韩版系。学妹 提交于 2019-12-16 20:41:49
Django的路由系统 URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表。 你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码。 URLconf配置: 基本格式: from django.conf.urls import url urlpatterns = [ url(正则表达式, views视图函数,参数,别名), ] 注意: Django 2.0版本中的路由系统已经替换成下面的写法:-------》官方文档: https://docs.djangoproject.com/en/2.0/topics/http/urls/ from django.urls import path urlpatterns = [ path('articles/2003/', views.special_case_2003), path('articles/<int:year>/', views.year_archive), path('articles/<int:year>/<int:month>/', views.month_archive), path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail

rabbitmq常见面试题

橙三吉。 提交于 2019-12-13 02:21:55
1、使用RabbitMQ有什么好处? 1.解耦,系统A在代码中直接调用系统B和系统C的代码,如果将来D系统接入,系统A还需要修改代码,过于麻烦! 2.异步,将消息写入消息队列,非必要的业务逻辑以异步的方式运行,加快响应速度 3.削峰,并发量大的时候,所有的请求直接怼到数据库,造成数据库连接异常 2、RabbitMQ 中的 broker 是指什么?cluster 又是指什么? broker 是指一个或多个 erlang node 的逻辑分组,且 node 上运行着 RabbitMQ 应用程序。cluster 是在 broker 的基础之上,增加了 node 之间共享元数据的约束。 3、RabbitMQ 概念里的 channel、exchange 和 queue 是逻辑概念,还是对应着进程实体?分别起什么作用? queue 具有自己的 erlang 进程;exchange 内部实现为保存 binding 关系的查找表;channel 是实际进行路由工作的实体,即负责按照 routing_key 将 message 投递给 queue 。由 AMQP 协议描述可知,channel 是真实 TCP 连接之上的虚拟连接,所有 AMQP 命令都是通过 channel 发送的,且每一个 channel 有唯一的 ID。一个 channel 只能被单独一个操作系统线程使用,故投递到特定