运用 Amazon Web Services 集成化公司运用程序流程

  探寻怎样运用 XML 和 Amazon Web Services 集成化公司运用程序流程,和应用Microsoft .NET (C#) 和 Java 服务平台搭建混合开发运用程序流程集成化作用。

 序列 是用于储存等候解决的信息的临时性数据信息构造。Amazon Simple Queue Services (Amazon SQS) 是1个适用 Web 服务的高能用性可伸缩信息序列。Amazon SQS 的关键好处包含:

根据云的处理计划方案。由 Amazon 管理方法,不需应用独享基本设备,也不必须技术专业适用专业知识。 根据 Inter。任何联接到 Inter 的顾客端都可以以根据 Web 服务浏览该服务,因而适用业务流程到业务流程(B2B)集成化。 冗余。该服务在好几个服务器上储存全部信息,以出示高能用性和容错机制。 好几个高并发读/写。Amazon SQS 适用好几个过程另外读写能力1个序列,和在解决对话框时锁住信息,以免两个顾客端另外解决1条信息。 可配备。根据应用 Amazon SQS 服务,您能够依据储存在序列中的信息的解决要求设计方案和锁住对话框。锁住对话框可以阻拦两个序列载入器另外解决同1个序列项。针对解决時间更长的序列项,则必须更长期地锁住对话框。锁住对话框由可见性请求超时主要参数操纵,您能够给每一个序列配备该主要参数。 易于应用的 API。它为普遍的語言(包含 Java 和 Microsoft .NET 服务平台)出示 API 包装器,以适用迅速开发设计并没有缝地集成化到现有运用程序流程中。 低成本费的处理计划方案。企业仅需为它们的 HTTP 恳求应用的带宽付费;Amazon SQS 不扣除别的附加的花费。

  在刚开始 Amazon SQS 开发设计以前,掌握它的1些特点是是非非常有协助的。假如不上解这些特点,您一开始应用 Amazon SQS 时将会会碰到挫败,或觉得疑惑。

  最先,Amazon 不可以确保序列项的解决次序。这代表着优秀先出(first-in-first-out,FIFO)解决不可到确保,这在许多信息序列完成中都很普遍。Amazon 仅确保全部信息都派发出去。

  Amazon SQS 的第2大特点是最后1致性。大中型数据信息库系统软件的关键特点是1致性、高能用性和可伸缩性。Amazon 并不是关心全部 3 个特点,而是关键关心高能用性和可伸缩性,随后再以此为基本出示最后的1致性。这代表着 Amazon 根据将全部信息推送到好几个服务器来完成高能用性和可伸缩性。Amazon 确保最后会将全部信息派发出去,但不确保何时派发它们。从好用的角度看,这代表着倘若您向1个序列推送 3 条信息,当下一次尝试接受这些信息时,不1定能收到全部 3 条信息。您将会在1个 Read 中收到全部 3 条信息,或在第1个 Read 中收到前两条信息,在第2个 Read 中收到第3条信息。假如您不断地轮询该序列,最后毫无疑问能收到全部 3 条信息。

  以便刚开始应用 Amazon SQS,您务必依据自身应用的語言获得 Amazon SQS 的 API 库。Amazon 为全部普遍的語言都出示了1个库,例如 Perl、Microsoft Visual Basic .NET、C#、Java 和 PHP。这些库是开源系统的,而且易于应用。参照材料小标题出示这些库的免费下载连接。

根据 Java 語言应用 Amazon SQS

  如今您最先学习培训怎样应用 Java 語言建立序列、推送信息和接受信息。第1步是建立1个 Amazon SQS 序列。清单 1 中的编码显示信息了怎样为 Amazon SQS 建立 HTTP 顾客端、案例化 CreateQueueRequest 目标和启用序列建立恳求。Aess Key ID(由 20 个字母和数据构成)是恳求身份认证或载入序列项所需的密匙。以便建立或实际操作序列项,您必须应用 Secret Aess Key(由 40 个字母和数据构成)。申请注册 Amazon 时就会收到这些密匙
清单 1. 建立 Amazon SQS 序列


// create client AmazonSQS service = new AmazonSQSClient(aessKeyId, secretAessKey); // instantiate create queue request CreateQueueRequest request = new CreateQueueRequest(); request.setQueueName(queueName); request.setDefaultVisibilityTimeout(30); // execute create queue operation and get the server response System.out.print("Creating Queue: " + queueName); CreateQueueResponse response = service.createQueue(request); if (response.isSetCreateQueueResult()) { System.out.print("Create Queue Result:"); CreateQueueResult createQueueResult = response.getCreateQueueResult(); if (createQueueResult.isSetQueueUrl()) { System.out.print("Queue Url: " + createQueueResult.getQueueUrl());

 

  下1步是向全新建立的序列推送1条信息。清单 2 中的编码显示信息了怎样为 Amazon SQS 建立 HTTP 顾客端,和怎样向序列推送1个简易的信息。


清单 2. 向序列推送信息


// create client AmazonSQS service = new AmazonSQSClient(aessKeyId, secretAessKey); // instantiate send message request SendMessageRequest request = new SendMessageRequest(); request.setQueueName(queueName); request.setMessageBody("Test SQS Message"); // execute the send message operation and get the server response SendMessageResponse response = service.sendMessage(request); if (response.isSetSendMessageResult()) { System.out.print("Send Message Result: "); SendMessageResult sendMessageResult = response.getSendMessageResult(); if (sendMessageResult.isSetMessageId()) { System.out.print("\tMessageId: " + sendMessageResult.getMessageId());

 

  如今,大家尝试从序列接受信息。清单 3 显示信息了怎样为 Amazon SQS 建立 HTTP 顾客端,和怎样从序列接受信息。Message 包括来自序列的信息并公布几个重要方式:

getMessageId。回到信息的唯1标志符。您可使用 isSetMessageId 明确信息 ID 是不是已设定。 getReceiptHandle。将句柄回到给信息。句柄用于删掉信息。您可使用 isSetReceiptHandle 明确信息句柄是不是已设定。 getBody。以标识符串的方式回到信息体。信息能够是纯文字或 XML,您可使用 isSetBody 明确信息体是不是已设定。


清单 3. 从序列接受信息


// create client AmazonSQS service = new AmazonSQSClient(aessKeyId, secretAessKey); // instantiate the receive message request ReceiveMessageRequest request = new ReceiveMessageRequest(); request.setQueueName(queueName); // the following two parameters are optional request.setMaxNumberOfMessages(10); // set maximum number of messages to receive request.setVisibilityTimeout(30); // set visibility window // execute the receive messages operation and get server response ReceiveMessageResponse response = service.receiveMessage(request); System.out.print("Receive Message Response:"); if (response.isSetReceiveMessageResult()) { ReceiveMessageResult receiveMessageResult = response.getReceiveMessageResult(); java.util.List Message messageList = receiveMessageResult.getMessage(); for (Message message : messageList) { if (message.isSetMessageId()) { System.out.print("MessageId: " + message.getMessageId()); if (message.isSetReceiptHandle()) { System.out.print("ReceiptHandle: " + message.getReceiptHandle()); if (message.isSetBody()) { System.out.print("Body: " + message.getBody());

根据 C# 应用 Amazon SQS

  如今,您将应用 C# 将1个目标系列化到 XML,并将其做为 Amazon SQS 信息推送。

  第1步是建立1个将被系列化的业务流程目标;清单 4 显示信息了1个 Product 目标。公共性特性被操纵 XML 系列化的特性装饰。C# 特性相近于 Java 注解,界定特性怎样投射到 XML 元素或 XML 特性。另外,这个类包括将目标案例系列化到 XML 的 ToXml() 方式。


清单 4. 建立用于系列化的业务流程目标


/// param The product price. /param public Product(string productName, decimal productPrice) this.ProductName = productName; this.ProductPrice = productPrice; /// summary /// Converts to XML. /// /summary /// returns /returns public String ToXml() StringBuilder output = new StringBuilder(); // no name space XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add("", ""); // settings to omit xml declaration XmlWriterSettings settings = new XmlWriterSettings(); settings.OmitXmlDeclaration = true; // finally serialize to string XmlWriter writer = XmlTextWriter.Create(output, settings); XmlSerializer serializer = new XmlSerializer(typeof(Product)); serializer.Serialize(writer, this, ns); // return string containing XML document return output.ToString();

 

  接下来,推送 XML 信息。用于 Amazon SQS 的 Amazon C# API 在作用上相近于 Java API。清单 5 中的编码显示信息了怎样应用 C# 推送信息。


清单 5. 应用 C# 推送信息


Product prod = new Product("Widget", 1.5M); string aessKeyId = ConfigurationSettings.AppSettings["AmazonAessKeyID"]; string secretAessKey = ConfigurationSettings.AppSettings["AmazonSecretAessKey"]; AmazonSQS service = new AmazonSQSClient(aessKeyId, secretAessKey); SendMessageRequest request = new SendMessageRequest(); request.MessageBody = prod.ToXml(); request.QueueName = "TestQueue"; SendMessageResponse response = service.SendMessage(request); if (response.IsSetSendMessageResult()) Console.WriteLine("Send Message Response: "); SendMessageResult sendMessageResult = response.SendMessageResult; if (sendMessageResult.IsSetMessageId()) Console.WriteLine(String.Format("MessageId {0}", sendMessageResult.MessageId)); if (sendMessageResult.IsSetMD5OfMessageBody()) Console.WriteLine(String.Format("MD5OfMessageBody: {0}", sendMessageResult.MD5OfMessageBody));


图 1. 推送 XML 信息的輸出

  最终1步是从序列接受 XML 信息,并反系列化案例。清单 6 显示信息了将 XML 信息反系列化到 Product 案例的编码。


清单 6. 反编码序列化 XML 信息


string aessKeyId = ConfigurationSettings.AppSettings["AmazonAessKeyID"]; string secretAessKey = ConfigurationSettings.AppSettings["AmazonSecretAessKey"]; AmazonSQS service = new AmazonSQSClient(aessKeyId, secretAessKey); ReceiveMessageRequest request = new ReceiveMessageRequest(); request.QueueName = "TestQueue"; ReceiveMessageResponse response = service.ReceiveMessage(request); if (response.IsSetReceiveMessageResult()) Console.WriteLine("Receive Message Result:"); ReceiveMessageResult receiveMessageResult = response.ReceiveMessageResult; List Message messageList = receiveMessageResult.Message; foreach (Message message in messageList) if (message.IsSetMessageId()) Console.WriteLine(String.Format("MessageId: {0}", message.MessageId)); if (message.IsSetBody()) Console.WriteLine(string.Format("Body: {0}", message.Body)); String xml = message.Body; StringReader sr = new StringReader(xml); XmlSerializer serializer = new XmlSerializer(typeof(Product)); prod = (Product) serializer.Deserialize(sr); Console.WriteLine(string.Format("Id: {0}", prod.Id)); Console.WriteLine(string.Format("Name: {0}", prod.ProductName)); Console.WriteLine(string.Format("Price: {0}", prod.ProductPrice));


图 2. 接受 XML 信息輸出

  虽然以上的事例十分简易,可是它们是是非非常强劲的,由于您能够系列化1个目标,并向另外一个不局限于当地物理学互联网的运用程序流程推送信息。这里沒有繁杂的防火墙限定或安全性性考虑到事项。另外,不必须用同样的語言撰写信息的推送器和接受器,乃至不必须应用同样的服务平台。

技术性简述和设计方案

  这个示例处理计划方案包括必须集成化业务流程步骤的分销商和生产制造商。分销商 从生产制造商 处选购产品并售卖给顾客。

  当顾客必须产品时,分销商应用 C# WinForm 顾客端递交1个顾客定单。定单递交程序流程将定单细节储存在1个当地 MySQL 数据信息库中。该顾客端还容许客户访问库存、查询定单和 Amazon SQS 序列。

  1般而言,分销商的库存可以考虑顾客的购买要求。假如库存不够的话,分销商会立即向生产制造商推送1个选购定单。随后,当物件早已传出时,生产制造商推送回1个定单汇总。全部这些通讯都应用 Amazon SQS 来进行。

  分销商的 Order Fulfillment 和 Inventory Management 服务也是应用 C# 搭建的,它轮询进到的产品和等待处理的顾客定单。当解决顾客定单时发现产品库存少于购买数量,那末将应用 Amazon SQS 向生产制造商推送1个选购定单。序列项的信息体是1个包括选购定单的 XML 文本文档。

  生产制造商的 Order Processing Service 是根据 Java 服务平台搭建的,它解决选购定单序列。当物件早已传出时,它将应用 Amazon SQS 向分销商回应1条信息。该信息的信息体是包括定单汇总的 XML 文本文档。

 显示信息了涉及到到的系统软件。


图 3. 处理计划方案概图

建立 XML 方式

  第1步是为在分销商和生产制造商之间推送的信息界定 XML 方式。您必须两个方式:1个选购定单和1个定单汇总。

清单 7 显示信息了选购定单的方式。


清单 7. 选购定单方式


?xml version="1.0" encoding="utf⑻"? xs:schema xmlns:xs="w3/2001/XMLSchema" xs:element xs:plexType xs:sequence xs:element minOurs="0" / xs:element minOurs="0" / xs:element minOurs="0" maxOurs="unbounded" xs:plexType xs:sequence xs:element minOurs="0" / xs:element minOurs="0" / xs:element minOurs="0" / xs:element minOurs="0" / xs:element minOurs="0" / /xs:sequence /xs:plexType /xs:element xs:element minOurs="0" maxOurs="unbounded" xs:plexType xs:sequence xs:element minOurs="0" / xs:element minOurs="0" / xs:element minOurs="0" / xs:element minOurs="0" / xs:element minOurs="0" / /xs:sequence /xs:plexType /xs:element xs:element minOurs="0" maxOurs="unbounded" xs:plexType xs:sequence xs:element minOurs="0" maxOurs="unbounded" xs:plexType xs:attribute / xs:attribute / xs:attribute / /xs:plexType /xs:element /xs:sequence /xs:plexType /xs:element /xs:sequence /xs:plexType /xs:element /xs:schema

Purchase Order XML 方式包括以下重要元素:

表 1. 选购定单方式中的重要元素

 


?xml version="1.0" encoding="utf⑻"? xs:schema xmlns:xs="w3/2001/XMLSchema" xs:element xs:plexType xs:sequence xs:element minOurs="0" / xs:element minOurs="0" / xs:element minOurs="0" / xs:element minOurs="0" maxOurs="unbounded" xs:plexType xs:sequence xs:element minOurs="0" / xs:element minOurs="0" / xs:element minOurs="0" / xs:element minOurs="0" / xs:element minOurs="0" / /xs:sequence /xs:plexType /xs:element xs:element minOurs="0" maxOurs="unbounded" xs:plexType xs:sequence xs:element minOurs="0" / xs:element minOurs="0" / xs:element minOurs="0" / xs:element minOurs="0" / xs:element minOurs="0" / /xs:sequence /xs:plexType /xs:element xs:element minOurs="0" maxOurs="unbounded" xs:plexType xs:sequence xs:element minOurs="0" maxOurs="unbounded" xs:plexType xs:attribute / xs:attribute / xs:attribute / /xs:plexType /xs:element /xs:sequence /xs:plexType /xs:element /xs:sequence /xs:plexType /xs:element /xs:schema

Order Summary XML 方式包括以下重要元素:

表 2. 定单汇总方式中的重要元素

 


界定数据信息库实体线实体模型

接下来,大家界定数据信息库方式。图 4 显示信息了数据信息库实体线实体模型。


图 4. 数据信息库实体线实体模型

Reseller 数据信息实体线包含下列內容:

Customer 包括定单的顾客联络信息内容。 CustomerOrder 包括顾客定单的定单信息内容。 CustomerOrderDetail 包括顾客定单的产品细节。 Inventory 包括分销商的库存。

Manufacturer 数据信息实体线为:

VendorOrder 追踪由生产制造商的 Order Processing Service 解决的选购定单。

界定信息序列

最终必须界定的组建是信息序列。表 3 显示信息了这个处理计划方案的信息序列。

表 3. Amazon SMS 信息序列

 

相关阅读