一种基于RabbitMq的消息推送系统的设计与实现

合集下载

rabbitmq应用实例

rabbitmq应用实例

rabbitmq应用实例RabbitMQ是一个流行的开源消息中间件,它可以帮助我们简化分布式系统之间的通信,并提高系统的可靠性。

以下是RabbitMQ的应用实例:1. 分布式任务队列在一个大型的分布式系统中,任务通常会被分配到多个节点进行并行处理。

在这种情况下,我们可以使用RabbitMQ来实现一个分布式的任务队列。

例如,一个电商网站可能需要在每天的晚上对所有商品的价格进行重新计算。

这个任务可能需要数小时才能完成,因此我们可以将这个任务分解成许多小的子任务,并将它们分配给多个节点进行处理。

节点可以使用RabbitMQ从任务队列中获取需要处理的消息,并将处理结果发送回队列中。

2. 日志收集器在一个分布式的系统中,各个节点可能会生成大量的日志文件。

为了方便管理和分析这些日志文件,我们可以使用RabbitMQ来实现一个日志收集器。

例如,一个在线电商网站可能需要追踪用户在网站上的行为。

这个过程会产生大量的日志文件,这些日志文件可能存储在不同的节点上。

我们可以使用RabbitMQ来收集这些日志文件,将它们发送到一个中央的日志处理节点,然后进行统一的处理和分析。

3. 消息推送在一个在线系统中,我们经常需要向用户发送推送通知。

我们可以使用RabbitMQ来实现一个消息推送的系统。

例如,一个在线聊天应用程序可能需要将用户之间的消息发送到相应的用户。

通过使用RabbitMQ,我们可以将消息发送到一个中央的消息队列中,然后从队列中获取消息并将其发送给相应的用户。

4. 事件驱动架构在一个分布式的系统中,我们经常需要使用事件来触发系统内的各个流程。

我们可以使用RabbitMQ来实现一个事件驱动的架构。

例如,在一个电商网站中,当一个用户下单时,我们可以使用RabbitMQ来发布一个订单事件。

这个事件可以触发其他部分的系统响应,例如库存管理系统可以更新库存,财务系统可以生成账单等。

总之,RabbitMQ是一个功能强大的消息中间件,可以帮助我们有效地组织分布式系统之间的通信。

java rabbitmq延时队列的实现原理和应用实例

java rabbitmq延时队列的实现原理和应用实例

java rabbitmq延时队列的实现原理和应用实例RabbitMQ 是一个开源的消息代理软件,它允许在应用程序之间发送和接收消息。

RabbitMQ 支持多种消息协议,如 AMQP、MQTT、STOMP 等,并且可以与许多编程语言集成,包括 Java。

延时队列是一种特殊类型的队列,其中的消息只有在指定的延迟时间过后才能被消费。

这在处理一些需要延迟处理的任务时非常有用,例如处理日志文件、周期性任务等。

以下是 RabbitMQ 实现延时队列的原理和应用实例:实现原理RabbitMQ 的延时队列是通过 RabbitMQ 的插件"rabbitmq_delayed_message_exchange" 来实现的。

这个插件在RabbitMQ 中创建了一个特殊的交换器类型,称为 "delayed message exchange"。

这个交换器的工作原理是:当一个消息被发布到这个交换器时,RabbitMQ 会先保存这个消息,并设置一个延迟时间。

在延迟时间过后,RabbitMQ 会将这个消息发送到绑定的队列中。

应用实例以下是一个简单的 Java 应用实例,演示了如何使用 RabbitMQ 的延时队列:1. 首先,需要在 RabbitMQ 中安装"rabbitmq_delayed_message_exchange" 插件。

这可以通过在RabbitMQ 的命令行界面运行以下命令来完成:```shellrabbitmq-plugins enable rabbitmq_delayed_message_exchange```2. 在 Java 应用中,需要添加 RabbitMQ 的依赖库。

这可以通过 Maven 或Gradle 来完成。

以下是一个 Maven 的示例:```xml<dependency><groupId></groupId><artifactId>amqp-client</artifactId><version></version></dependency>```3. 在 Java 代码中,创建一个 ConnectionFactory 对象,并设置RabbitMQ 服务器的地址:```javaConnectionFactory factory = new ConnectionFactory(); ("localhost");```4. 创建一个 Connection 对象,并创建一个 Channel 对象:```javaConnection connection = ();Channel channel = ();```5. 创建一个 DelayedMessageExchange 对象,并设置它的名称和类型:```javaDelayedMessageExchange exchange = new DelayedMessageExchange("delayed-exchange", "x-delayed-message");```6. 创建一个 QueueingConsumer 对象,并设置它的回调函数:```javaQueueingConsumer consumer = new QueueingConsumer(channel); (new DefaultConsumerCallback() {public void handleDelivery(String consumerTag, Envelope envelope, properties, byte[] body) throws IOException {long delay = ("x-delay"); // 获取延迟时间(毫秒)("Received delayed message after " + delay + " ms: " + new String(body, "UTF-8")); // 输出消息内容}});```。

赴日本参加世界气象组织信息系统(WIS)实施研讨会总结

赴日本参加世界气象组织信息系统(WIS)实施研讨会总结

赴日本参加世界气象组织信息系统(WIS)实施研讨会总结王鹏(国家气象信息中心,北京100081)1概况2019年3月11—13日,由日本气象厅(JMA)主办的世界气象组织(WMO)信息系统(WIS)实施研讨会在日本东京举行,菲律宾、泰国、越南、柬埔寨、老挝、缅甸等东京全球信息系统中心(GISC)责任区国家代表以及中国、澳大利亚、德国等国专家与会。

国家气象信息中心系统工程室王鹏作为中国气象局技术专家参加会议。

2会议主要内容3月11—12日,会议内容是研讨为配合WIS2.0实施各国家的必要行动、东京全球信息系统中心(GISC)云试验项目的实施方案及其责任区国家用户的需求%3月13日,日本、中国、澳大利亚、德国的技术专家代表所属GISC研讨备份方案、WIS核心网络、WIS监视和WIS 2.0实施等技术思路。

(1)背景介绍。

日方首先介绍了本次会议的目标、WMO全球通信系统(GTS)的发展历程、WMO关于规划WIS2.0实施的决定等背景,并简介绍了日主的议。

(2)回顾介绍WIS1.0的现状和存在问题。

日方介绍了WIS1.0的功能、组成、布局,目前基于GTS和专线的封闭式网络、点对点式数据推送的技术概况,分析并指出了这种架构在成本、带宽、交换数据量、数据服务范围等方面都已无法满足对信息业务系的需。

(3)介绍和研讨WIS2.0的策略要求和实施路径。

日方介绍了WMO 执行理事会(EC-69)对WIS2.0提出的策略要求,并在用户预期、数据量、经费成本、数据政策、技术趋势等方面分析了WIS2.0实施的主要困难。

之后,介绍了WIS演进专家组(TT-eWIS)2018年11月会议研讨得出的WIS2.0实施路径专家意见(尚未得到世界气象大会或执行理事会研究批准)和或许进度计划,分析了按照该实施路径,在技术上和WIS各中心责任分工上的变化和影响。

会的国家中心表技术能力、经费能力、业务组织等方面行了。

于京GISC区国家基本都属于欠发达或最不发达国家,在升级建设和运行费用、互联网连接的稳定性等方面都存在问题。

rabbitmq应用实例

rabbitmq应用实例

rabbitmq应用实例RabbitMQ应用实例RabbitMQ是一种开源的消息代理软件,广泛应用于分布式系统中,用于在不同应用程序之间传递消息。

它采用AMQP协议,提供了可靠的消息传递机制,能够确保消息的可靠性和顺序性。

下面我们来看几个RabbitMQ的应用实例。

1. 订单处理系统假设有一个电商网站,用户下单后需要进行订单处理。

在这个过程中,需要将订单信息传递给库存系统、支付系统和物流系统等。

这时就可以利用RabbitMQ来实现不同系统之间的消息传递。

当用户下单时,订单系统将订单信息发送到RabbitMQ,其他系统订阅相应的消息队列,从而实现订单信息的同步处理。

2. 日志收集系统在一个分布式系统中,各个节点会产生大量的日志信息。

为了方便管理和分析这些日志,可以使用RabbitMQ来搭建日志收集系统。

每个节点将日志信息发送到RabbitMQ的消息队列中,然后日志收集服务订阅这些消息队列,将日志信息汇总到中心服务器进行存储和分析。

3. 实时数据处理系统在一些实时数据处理场景中,比如金融交易系统、在线游戏等,需要对数据进行实时处理和分发。

RabbitMQ可以作为数据流处理的中间件,将数据发送到不同的处理节点进行处理。

通过RabbitMQ的消息队列机制,可以实现数据的实时传输和处理,确保系统的高可用性和可靠性。

4. 任务调度系统在一些任务调度场景中,比如定时任务、异步任务等,可以使用RabbitMQ来实现任务的调度和执行。

任务调度系统将任务信息发送到RabbitMQ的消息队列中,工作节点订阅消息队列并执行相应的任务。

通过RabbitMQ的消息确认机制,可以确保任务的可靠执行,避免任务丢失或重复执行的情况。

总结通过以上几个应用实例,我们可以看到RabbitMQ在分布式系统中的重要作用。

它不仅可以实现不同系统之间的消息传递,还可以提高系统的可靠性和可扩展性。

因此,在设计分布式系统时,可以考虑使用RabbitMQ来解决消息传递的问题,提升系统的性能和稳定性。

rabbitmq的使用方法

rabbitmq的使用方法

rabbitmq的使用方法RabbitMQ是一个开源的消息代理软件,用于实现异步消息传递。

以下是使用RabbitMQ的一些基本方法:1. 安装和配置:首先,你需要从RabbitMQ的官网下载并安装RabbitMQ 服务器。

安装完成后,你可以通过浏览器访问RabbitMQ的管理界面,进行基本的配置。

2. 创建队列:在RabbitMQ中,消息被存储在队列中。

你可以使用RabbitMQ的管理界面或者通过编程的方式创建队列。

例如,使用Python 的pika库,你可以这样创建一个队列:```pythonimport pikaconnection = (('localhost'))channel = ()_declare(queue='hello')()```3. 发送消息:一旦你创建了队列,你就可以开始发送消息到这个队列。

同样使用pika库,你可以这样发送消息:```pythonimport pikaconnection = (('localhost'))channel = ()_publish(exchange='', routing_key='hello', body='Hello World!') ()```4. 接收消息:要接收消息,你需要创建一个消费者来从队列中获取消息。

消费者可以是任何能够处理RabbitMQ消息的应用程序。

例如,你可以创建一个Python消费者来接收消息:```pythonimport pikaconnection = (('localhost'))channel = ()_declare(queue='hello')def callback(ch, method, properties, body):print(f" [x] Received {body}")_consume(queue='hello', on_message_callback=callback,auto_ack=True)print(' [] Waiting for messages. To exit press CTRL+C')_consuming()```5. 确认消息处理:在RabbitMQ中,你可以选择自动确认(auto_ack)或手动确认(manual_ack)消息处理。

rabbitmq的工作原理

rabbitmq的工作原理

rabbitmq的工作原理
RabbitMQ是一种消息队列系统,用于在分布式系统中传递消息。

它的工作原理基于AMQP(高级消息队列协议),它定义了一种标准的消息格式和通信协议。

具体来说,RabbitMQ的工作原理包括以下几个方面:
1. 发布和订阅模式:RabbitMQ支持发布和订阅模式,其中生产者将消息发送到交换机(exchange),然后由消费者订阅交换机中的消息。

交换机根据不同的路由规则将消息推送到相应的队列中,消费者从队列中接收到消息。

2. 消息确认:RabbitMQ支持消息确认机制,当消费者接收到消息后,会向RabbitMQ发送一个确认消息,告知服务器已经成功接收到消息。

如果消费者在一定时间内未发送确认消息,则RabbitMQ会将消息重新发送到队列中,确保消息不会丢失。

3. 消息持久化:RabbitMQ支持消息持久化机制,当消息发送到队列中时,可以将消息持久化到磁盘中,以防止服务器崩溃或重启时消息丢失。

4. 负载均衡:RabbitMQ支持负载均衡机制,可以将消息分发到不同的队列中,以确保消息处理的效率和可靠性。

总的来说,RabbitMQ的工作原理是通过交换机、队列、路由规则等机制,实现消息的发布、订阅和传递,同时支持消息确认、持久化和负载均衡等机制,确保消息处理的可靠性和高效性。

- 1 -。

rabbitmq使用手册

rabbitmq使用手册

rabbitmq使用手册RabbitMQ是一种开源的消息队列中间件,采用AMQP协议,被广泛应用于构建可靠、高效的分布式系统。

本手册将详细介绍RabbitMQ 的安装、配置、使用和常见问题解决方案,帮助读者快速上手使用RabbitMQ。

第一章安装与配置1.1 环境准备在开始安装RabbitMQ之前,需要确保系统满足以下要求:操作系统(例如Linux、Windows)、Erlang运行时环境以及RabbitMQ软件包。

1.2 安装RabbitMQ按照文档提供的方式,在所选的操作系统上安装RabbitMQ。

安装过程中需注意版本兼容性和安全配置。

1.3 配置RabbitMQ在安装完成后,需要对RabbitMQ进行适当的配置。

主要包括网络配置、认证与授权、虚拟主机、交换机和队列的创建等。

第二章消息发布与订阅2.1 消息生产者通过使用RabbitMQ的API,开发者可以编写生产者代码将消息发布到RabbitMQ的交换机上。

这里需要注意消息的序列化和指定交换机名称。

2.2 消息消费者RabbitMQ的消费者通过订阅交换机的队列来接收消息,可以使用RabbitMQ的API编写消费者代码,并实现消息的处理逻辑。

2.3 消息确认机制RabbitMQ提供了消息的确认机制,确保消息在传输过程中的可靠性。

开发者可以选择隐式确认或显式确认来保证消息的消费状态。

第三章消息路由与过滤3.1 路由模式RabbitMQ支持多种路由模式,如直接路由、主题路由和广播路由。

开发者可以根据实际需求选择最适合的路由模式。

3.2 消息过滤通过使用RabbitMQ的消息过滤功能,可以根据消息的属性进行过滤,只有满足条件的消息才会被消费者接收。

第四章高级特性与扩展4.1 持久化使用RabbitMQ的持久化机制,可以确保消息在服务器重启后依然存在,防止消息丢失。

4.2 集群与高可用通过搭建RabbitMQ集群,可以提高系统的可用性和扩展性。

在集群中,消息将自动在节点之间进行复制。

java操作rabbitmq实现简单的消息发送(socket编程的升级)

java操作rabbitmq实现简单的消息发送(socket编程的升级)

java操作rabbitmq实现简单的消息发送(socket编程的升级)准备:⽣产者⽅(Productor.java):1 package RabbitMQTest;234import java.util.HashMap;5import java.util.Map;67import com.rabbitmq.client.AMQP.Queue;8import com.rabbitmq.client.Channel;9import com.rabbitmq.client.Connection;10import com.rabbitmq.client.ConnectionFactory;1112 public class Productor {13 public static String QUEUE_NAME = "STEVEN";14 public static void main(String[] args) {15 //初始化socket链接16 ConnectionFactory factory = new ConnectionFactory();17 //指定链接地址18 factory.setHost("localhost");19try{20 //建⽴程序和rabbitmq的socket连接21 Connection connection = factory.newConnection();22 //创建管道23 Channel channel = connection.createChannel();24 //声明队列25 channel.queueDeclare(QUEUE_NAME,false,false,false,null);26 //让当前线程睡眠8s,以检验rabbitmq的消息轮询27 Thread.currentThread().sleep(8000);28 String message = "hello,world";29 //发送消息30 channel.basicPublish("", QUEUE_NAME, null, message.getBytes());31 System.out.println("[x] send the message"+message);32 channel.close();33 connection.close();34 }catch (Exception e) {35 System.out.println("程序出错:"+e);36 }3738 }39 }View Code消费者⽅(Consummer.java):1package RabbitMQTest;2import com.rabbitmq.client.Connection;3import com.rabbitmq.client.Channel;4import com.rabbitmq.client.ConnectionFactory;5import com.rabbitmq.client.QueueingConsumer;6import com.rabbitmq.client.QueueingConsumer.Delivery;7/**8 * 本程序为了练习rabbitmq的简单操作9 *10 * @author STEVEN11 *12*/13public class Consumer {14public static void main(String[] args) {15try {16//创建连接⼯⼚对象17 ConnectionFactory factory = new ConnectionFactory();18//设置⼯⼚对象的参数,⽤来连接rabbitmq19 factory.setHost("localhost");20//建⽴程序与rabbitmq的socket连接21 Connection connection = factory.newConnection();22//创建管道23 Channel channel = connection.createChannel();24//声明队列25 channel.queueDeclare(Productor.QUEUE_NAME, false, false, false, null);26 System.out.println(" [*] Waiting for messages. To exit press CTRL+C");27//创建队列消费对象28 QueueingConsumer consumer = new QueueingConsumer(channel);29//设置参数30 channel.basicConsume(Productor.QUEUE_NAME, true, consumer);31//创建接收对象来接收来⾃服务端的消息32 Delivery delivery = null;33//循环接收,相当于开启了⼀个监听34while (true) {35 delivery = consumer.nextDelivery();36 String message = new String(delivery.getBody());37 System.out.println(" [x] Received '" + message + "'");38 }39 } catch (Exception e) {40 System.out.println(e);41 }42 }43 }View Code。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

• 204

近年来,网络技术发展迅速,互联网企业之间合作加强。

为了实现企业间数据能够共享,使数据利益最大化,相应的开放接口平台应运而生,但在数据不断变化的情况下,不同系统之间的数据一致性难以保证。

本文设计了一种基于RabbitMq 的消息推送系统,实现了变更数据的获取模块、数据加密模块、数
据的推送模块以及发送失败数据获取模块等核心功能模块,保证了不同系统之间数据的一致性,并进行了系统相关模块的测试,验证了该方案的有效性与可行性。

系统上线后企业合作方系统成功对接,对其他企业相关系统的设计提供了一定的参考价值。

引言:随着互联网技术的飞速发展,数据时代到来。

各个企业都面临着巨大的挑战,为了提高自身产品的核心竞争力,越来越多的企业系统中都集成了获取第三方系统数据的能力,以数据驱动产品,来实现数据利益最大化。

获取第三方数据时,在应对获取的历史数据不变更的情况下只需要一次调用接口获取数据即可,但在面对历史数据可能变更的情况下,则需要数据提供方定时将变更的数据推送至数据消费方。

在此背景下,本文开发了一种基于RabbitMq 的消息推送系统,来保证数据提供方与数据消费方系统中数据的一致性。

1.RabbitMq消息队列
在分布式架构盛行的时代,消息队列作为分布式架构中必不可少的重要组件,其已经逐渐成为企业IT 系统内部通讯的核心手段。

其能够帮助业务系统进行解耦,提升开发效率和保证系统稳定性等诸多好处。

目前业界出现了有许多主流的消息中间件,如阿里巴巴开源的分布式消息中间件RocketMq ,Apache 软件基金会开发的Kafka ,再如使用Erlang 编写的一个开源的实现了高级消息队列协议的消息中间件RabbitMq 。

它们都具有消息队列最基础的特性,实现了JMS 通信协议但各自又有自己的优缺点以及使用场合。

阿里巴巴开源的分布式消息中间件RoketMq ,其服务端使用JAVA 编写,客
户端支持JAVA 以及C++,是一种基于发布订阅的队列模型消息中间件,它能够严格保证消息发送顺,采用长轮询加丰富的拉取模式支持消息持久化,具有一定的实时性消息订阅机制。

其支持10亿级别的消息堆积,在面对大量的消息堆积时,性能也很强悍。

但它只有发布和订阅的消息方式,消息类型只支持Message ,并且对于消费者来说,通过拉取方式将消息保存到本地,消费完再向服务器返回,在网络异常的情况下可能会出现重复。

Apache 软件基金会开发的Kafka ,其主要是用来解决百万级别的数据中生产者和消费者之间数据传输的问题,在处理大量数据的情况下,提够供超高的吞吐量,ms 级的延迟,具有极高的可用性以及可靠性,而且分布式可以任意扩展。

但是其具有消息重复消费以及消息丢失的问题,功能较为简单,主要支持简单的MQ 功能。

由LShift 实现的由Erlang 语言编写的RabbitMq 消息中间件,主要由broker 实例,Exchange 交换器,Queue 队列以及绑定关系组成,并且Exchange 可支持多种类型,如direct 类型,fanout 类型,topic 类型与headers 交换机类型,使用者可以根据使用场景选择相应的交换机类型。

RabbitMq 采用信道通信,不采用tcp 直接通信,从而减少了tcp 三次握手和四次挥手所带来的的创建和销毁的开销,具有高可用高并发的优点。

还有消息确认机制和持久化机制,可靠性高,并且在易用性、扩展性、高可用性等方面表现不俗。

终上所述,消息队列RoketMq ,Kafka ,RabbitMq 都有其适用场景,阿里巴巴的RoketMq 适用于大的吞吐量场景,而Kafka 在大数据领域的实时计算以及日志采集被大规模使用。

而RabbitMq 消息队列适用于对数据一致性、稳定性和可靠性要求很高的场景。

本系统对数据的一致性和可靠性要求较高,因此在以上综合对比下采用RabbitMq 来设计与实现消息推送系统。

2.系统设计
本文采用分层架构设计思想,使用RabbitMq 将系统进行分离解耦,将系统分为web 层,中间层,外部系统对接层与数据存储层如图1所示。

Web 层:此层主要给用户提供操作数据的入口,采用MVC 模式开发,接收用户从前端传入的变更数据,之后会持久化到MySql 数据库中。

中间层:此层主要是将用户的更新操作数据存入RabbitMq 消息队列,然后将消息队列中的变更数据取出,并通过RabbitMq 的消息重试机制来保证数据的可靠性。

外部系统对接层:此层将RabbitMq 消息队列中取出的数据,采用Http 请求的方式发送至第三方系统当中,在发送数据之前,将参数进行加密生成签名处理。

除此之外并提供获取推送失败数据的接口,来保证双方系统数据的最终一致性。

数据存储层:此层采用MySql 关系型数据库进行数据存储,存储两方面的数据,一是对用户变更的数据进行存储,二是存储将变更数据发送至第三方系统时失败的信息。

一种基于RabbitMq
的消息推送系统的设计与实现
长江大学电子信息学院 肖 顺
严碧波
• 205

图1 系统架构图
3.系统实现与功能测试
3.1 消息推送流程
消息推送流程如图2所示,当用户在页面进行数据的更改操作时,一方面将用户更新的数据存入MySql 数据库,另一方面将数据保存至RabbitMq 消息队列,在存入消息队列时队列长度可能越线,消息存储时间可能过期等因素,可能导致存入队列失败。

若存入RabbitMq 消息队列失败,则记录存入失败的相关信息,若存入成功则进行消息发送处理。

在消息发送过程中由于网络问题等因素,可能导致发送http 请求失败。

若失败则同样进行失败数据入库处理,最后单独提供获取失败数据的接口,来获取存入消息队列或发送失败过程中失败的数据,若发送成功则
完成消息推送任务。

图2 邮件发送流程图
3.2 功能实现
本系统基于Spring 开发,使用Spring 提供的相关功能来完成系统以下
几个功能模块。

(1)获取变更数据模块
此模块通过Spring AMQP 提供的RabbitTemplate 类来简化 R a b b i t M Q 发送和接收消息操作,发送消息时使用RabbitTemplate 类中的send()方法将数据发送至RabbitMq 消息队列中,不带参数时会将数据发送至默认的交换器及默认的路由键上。

RabbitTemplate 类中还实现了带参数的send()方法,传入参数可以指定发送至RabbitMq 指定的交换器和队列上。

从RabbitMq 队列取出数据后,通过继承MqMessageListener 类,重写processMessage(Message message)方法来处理从消息队列中取出的数据,参数message 为取出的消息。

(2)数据加密与发送模块
数据加密与发送模块主要实现在如图1中的外部系统对接层,在将变更数据在发送至第三方系统的过程前,通过HmacSHA1算法将第三方对接企业的密码与将要发送的消息进行加密生成签名,最后通过将签名Sign 作为参数拼接在http 请求的url 后面进行传输。

在数据对外发送时,主要通过自己实现的HttpUtil 类中的send()进行发送http 请求,本文采用HttpClient 来简化开发发送http 请求过程。

(3)发送失败数据获取模块
此模块单独提供接口来获取数据库中失败的数据,采用Spring MVC 框架开发,外部系统可以通过发送http 请求来获取失败数据,并且在不同层次之间使用spring 依赖注入的方式来进行分离解耦,使得各个层次容易进行定制。

在数据访问层使用MyBatis 框架来操作MySql 数据库。

3.3 功能测试
本文主要测试点分别为测试变更数据获取模块与数据推送模块。

变更数据获取模块采用Junit 进行单元测试,主要测试从RabbitMq 中所取数据是否与图1中web 层用户输入的变更数据是否一致。

数据推送模块则通过与企业合作方进行联合调试,验证推送至合作方系统中数据是否与MySql 数据库中用户所变更数据是一致。

如果不一致,则通过企业合作方手动调用获取失败数据接口后再次验证数据是否一致。

经过测试统计,数据推送失败率为12.7%,经过手动调用获取失败数据接口后,本系统Msql 数据库与合作方系统库中数据全部保持一致。

4.结束语
本文所设计的基于RabbitMq 的消息推送系统,在多方系统数据不一致的情况下,通过调用消息推送模块接口,与获取失败数据接口后,解决了数据提供方与数据消费方系统中数据不一致的问题。

此系统集成入第三方开放平台后,为企业提供了可靠数据,保证了数据的真实有效性,使得数据在
企业间充分得到利用发挥出最大价值,实现了数据共享,并提高了企业产品的核心竞争力,增强了企业之间的合作。

相关文档
最新文档