
最近,他们成功地为公民启用了用户处理系统。 最重要的是,当您家附近的道路上没有水,暖气或大洞时,您可以抱怨政府机构的问题。 您可以通过多种平台提出投诉:国家机构的网站,社交网络上的页面,呼叫中心。
我们的任务是创建一个单一的管道来处理所有部门的应用程序。
该系统的主要目标是尽可能加快处理呼叫的过程:使所有自动化过程自动化,控制过程每个阶段的时间安排,告知居民每个步骤。
该项目的具体任务之一是与大量外部系统集成的问题。
- 有必要从不同的地方学习,以处理整个投诉流程,以便能够与他们就申请的所有变更进行沟通,在公务员与公民之间进行通信,以澄清投诉的细节。
- 除此之外,我们还向第三方服务提供了一些功能。
因为 有很多数据,通常必须以异步模式工作,然后项目团队必须解决问题,以免扼杀自己和第三方系统。 该解决方案在软件消息代理Rabbit MQ中找到。 对于当时的团队来说,这是一种新技术。
以下是对项目后端开发人员Alexander Shcheglov和
WilyLynx的采访 ,他们处理了该问题并实现了集成。
-萨沙,你好! 请简要地告诉我们什么是Rabbit MQ?该软件主要用于实现不同客户端之间的延迟消息传递,即 当您现在不需要答案时。
-我正确地理解,通常它是这样工作的:发送服务在生成数据时将数据放入创建的队列中,接收服务是否需要此信息?那正是工作原理。
-为什么您(开发团队)为项目选择此解决方案?由于几个原因。 首先,在我们的情况下,同步处理(同时接收和处理)不是很关键,即 一条消息可能会在队列中挂起一段时间。 此外,易于使用:要接收消息,您只需要声明队列的名称,而无需编写服务。 好了,通用YP库的可用性。 无需发明任何东西即可使用RabbitMQ。
-我正确理解Rabbit MQ允许您控制系统和Web服务之间的数据交换吗?相反,我们仍然管理交换,但是“兔子”是组织此交换的绝佳工具。 在这里,您可以了解队列中消息的生存期,队列的最大长度,访问设置,群集,各种交换协议以及插件系统等。
-如何确定邮件已传递? -也就是说,如何确定客户在收货后已经延长了某些时间或挂了该过程?如果在一定时间内来自客户端的响应到达,则认为已交付。 实际上,它说他对生活感到高兴。 客户端可以在收到后立即发送响应,然后尝试处理该消息。 相反,也许首先尝试进行处理,如果成功,则发送响应。 或者,您可以提前告诉兔子,这样他就不必等待确认您的送达而只接收消息。 所有已发送的商品将自动视为已交付。
-例如,是否有可能不接收所有消息,而仅订阅特定应用程序上的消息?情况略有不同。 有一个发送消息的选项,其中消息发给所有客户。 此选项称为“发布/订阅”。 一个很好的例子:在您的公开消息中发布新消息。 您已发送,所有签名者都已收到。 并且已经收到后,他们认为可以阅读或不阅读。 通常,没有人会打扰您为自己创建一个单独的队列并仅使用它。 在这种情况下,路由将已经在应用程序级别,而兔子将成为通信通道。
-Sasha,告诉我,是否可以选择不创建数千个队列,而是为一个队列进行过滤和路由?从一开始它是行不通的,但是Rabbit将允许完成一些路由。
-请告诉我们更多。其中之一不是,但是有诸如“交换”和“路由键”之类的概念:
P-生产者,交换消息的发送者
X-交换本身
红色条纹-线
C1和C2-收件人

Pabbit可以发送消息以交换某些键(例如,错误/信息/警告)。 如您所见,不同的收件人正准备接收具有不同路由密钥的邮件。 此外,只有C2会收到带有“ info”键的消息,而两个C2都会收到带有“ error”键的消息。 也可以根据密钥模板接收消息。 这是我前面提到的另一种“发布/订阅”交换。

如您所见,在这些类型的交换中,每个接收者都有一个转弯,但是到最后,我们仍然具有过滤/路由的相似之处。
-您能回忆起Rabbit的研究和实施过程中出现的问题吗?除了懒惰,没有。 认真地,清晰的文档,大量的示例。
-您是否已经将与服务和外部系统的所有交换转移到该交换?现在,我们有38个队列:电路,外部系统,BI之间的交换。 但不幸的是,某些服务(读取部门)正在抵制。 因为 他们实施了休息。 另外,某些类型的交互涉及同时接收对请求的响应。
-您认为这个决定有多成功?对于不需要同步响应的跨部门协作? 对我来说,这是一个不错的选择。
使用的材料清单