zoukankan      html  css  js  c++  java
  • Windows Azure AppFabric 入门教学系列 (六):Message Buffer之初体验

    公告:本博客为微软云计算中文博客的镜像博客。部分文章因为博客兼容性问题,会影响阅读体验。如遇此情况,请访问原博客

    本文是Windows Azure AppFabric入门教学的第六篇文章。本文会介绍一下Service Bus中一个非常有用的特性-MessageBuffer。该特性类似于Queue Storage,作为一种小型的,临时的信息缓冲区,能够应用于多种场景。本例中,我们会简单的模拟一下订单系统:下单,查看订单,处理订单。

     

    前置条件

    为了使后续的教程能够顺利进行,请确保如下软件或组件已被安装:

    ·       Microsoft .NET Framework 3.5 SP1

    ·       Microsoft Visual Studio 2008 SP1 (or above)

    ·        8">AppFabric SDK

    ·       Windows Azure Platform Training Kit - December Update(示例代码)

                                 

     

     

     

    请确保您已拥有一定的WCF编程经验,若没有,请浏览这里以快速的初步了解WCF

    最后请确保已创建了一个AppFabric项目和一个服务命名空间。请参考这里 

     

     

    代码:

    1.          Windows Azure Platform Training Kit-December Update(示例代码)安装目录下C:/WindowsAzurePlatformKit/Labs/IntroServiceBus/Source/Ex05-MessageBuffer/end/CS(默认路径)找到完整的MssageBuffer程序代码。双击MssageBuffer.sln,以打开项目。

    2.          为了调试方便,请分别打开OrderPeek项目,OrderProcessorOrderSubmitter项目的Program.cs,以您在本教程第一篇文章中的信息,将相应处改为如下代码:

    Console.Write("Your Service Namespace: ");

    string serviceNamespace = "{your service namespace}";//Console.ReadLine();

    Console.Write("Your Issuer Name: ");

    string issuerName = "{your issuer name}"//Console.ReadLine();

    Console.Write("Your Issuer Secret: ");

    string issuerSecret = "{your issuer secret}"//Console.ReadLine();

     

    验证:

    3.          OrderPeek项目会创建一个存放订单的MessageBuffer,并能查看是否有未处理的订单。

    OrderSubmitter项目会生成新订单,并放入OrderPeek创建的MessageBuffer

    OrderProcessor项目会处理MessageBuffer中的订单。

    4.          右击OrderPeek项目,Debug->Start  new instance

    5.          右击OrderSubmitter项目,Debug->Start new instance。按照提示,输入字符串信息:

    例如:

                                                                               i.      200 nails [回车]

                                                                             ii.      1 hammer [回车]

                                                                            iii.      1 wrench [回车]

     

    如下图:

     

     

    6.                        我们看到OrderPeek实例会查看MessageBuffer是否有未处理的订单(order),并显示第一条未处理订单。如下图:

     

    7.                      右击OrderProcessor项目,Debug->Start new instance。 OrderProcessor会查看是否有有订单,轮询并打印出订单内容。如下图:

    最后,我们看到在第5步中发送的订单都已经被处理。

    8.          我们可以增加OrderProcessor(消费者的角色)的实例个数,来满足当在MessageBuffer中有许多Message需要被处理时的高负荷需求。当然,我们也可以有多个OrderSubmitter(生产者的角色)实例。

     

     

     

    探析:

    9.          我们先来看看如何创建一个MessageBuffer。打开OrderPeek项目的Program.cs,如下图:

    9.1 创建端点凭证(endpoint credentials

    9.2 创建MessageBuffer挂载的URI

    9.3 创建MessageBufferPolicyMessageBufferPolicy是创建MessageBuffer时的必要参数。以下为MessageBufferPolicy各属性及其含义。

    MessageBufferPolicy 属性

    描述

    ExpireAfter

    message buffer的生命周期

    MaxMessageCount

    在溢出策略被激活前,message buffer所能容纳最大message数量。

    OverflowPolicy

    message溢出时的行为。当前,当前唯一可用的行为是拒绝新进message,并向发送者发送错误信息。

    TransportProtection

    传输防护指端对端必须使用的安全等级。

    Authorization

    指定了发送和接收所需的授权类型,可以选择 “NotRequired”, “Required”, “RequiredToReceive”  “RequiredToSend”. 

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    调用EnsureMessageBufferExists函数来确保MessageBuffer被顺利创建。

    EnsureMessageBufferExists内部实现如下图:

     

    如果已经存在MessageBuffer,则调用GetMessageBuffer返回已经存在的MessageBuffer。若不存在,GetMessageBuffer会抛出异常,之后调用CreateMessageBuffer,创建新的MessageBuffer

    10.        创建好MessageBuffer之后,我们看下如何向该MessageBuffer发送Message。打开OrderSubmitter项目的Program.cs

    10.1取得已经创建好的MessageBuffer

    10.2因为不同的场景下需要发送不同的对象,需要将不同对象转换为MessageBuffer能处理的Message对象。System.ServiceModel程序集为我们提供了方便易用的TypedMessageConverter类来将对象转换为Message

    10.3将对象转换为Message之后,只需调用Send方法来发送Message

    10.4以上是MessageBuffer较高层次的封装,有兴趣的读者可以研究下AppFabric SDK 安装目录:Windows Azure platform AppFabric SDK/V1.0/Samples/ServiceBus/ExploringFeatures/MessageBuffer/PlainHttp/CS35PlainHttp项目。其演示了如何通过REST协议来操作MessageBufferREST协议是独立于语言和操作系统的,所以可以在非Windows系统上使用java等语言来使用MessageBuffer

    11.        同样的,处理Message的代码也非常简单。

     

    11.1调用EnsureMessageBufferExisits,因为我们的OderPeek项目已经创建了MessageBuffer,所以这一步我们会取得该MessageBuffer的引用。

    11.2初始化TypedMessageConverter

    11.3取得第一条Message

    11.4MessageTypedMessageConverter转换为需要处理的对象。

    11.5ProcessOrder为处理过程。

    11.6轮询下一条Message

    12. 更多MessageBuffer应用请参看AppFabric SDK 安装目录:Windows Azure platform AppFabric SDK/V1.0/Samples/ServiceBus/ExploringFeatures/MessageBuffer/目录下的项目。

  • 相关阅读:
    LR中日志设置和日志函数
    LR性能测试脚本增强与调试
    LR中HTTP协议录制模式选择
    LoadRunner系统架构简介与运行原理
    webpack 配置文件说明
    css3 扇形动画
    autoprefixer 处理css3的前缀
    css 判断是iphone4s iphone5 加载不同样式
    webpack编译sass报错找不到module /css-loader/index.js... || 安装node-sass报错
    es6 模块编译 *** is not function
  • 原文地址:https://www.cnblogs.com/new0801/p/6176739.html
Copyright © 2011-2022 走看看