日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

Dapr + .NET 实战(六)绑定

發(fā)布時(shí)間:2023/12/4 asp.net 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Dapr + .NET 实战(六)绑定 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

什么是綁定

處理外部事件或調(diào)用外部接口的功能就是綁定,綁定可以提供以下好處:

  • 避免連接到消息系統(tǒng) ( 如隊(duì)列和消息總線 ) 并進(jìn)行輪詢的復(fù)雜性

  • 聚焦于業(yè)務(wù)邏輯,而不是如何與系統(tǒng)交互

  • 使代碼不受 SDK 或外部庫的強(qiáng)耦合

  • 處理重試和故障恢復(fù)

Dapr提供了很多支持的綁定,請(qǐng)見綁定。綁定分為輸入綁定輸出綁定,輸入綁定是監(jiān)聽外部事件,觸發(fā)業(yè)務(wù)邏輯。輸出綁定是調(diào)用外部資源。

綁定可能與前面介紹的發(fā)布訂閱類似。盡管它們很相似,但也有不同之處。發(fā)布/訂閱側(cè)重于 Dapr services 之間的異步通信。資源綁定具有更大的范圍。它側(cè)重于軟件平臺(tái)之間的系統(tǒng)互操作性。在不同的應(yīng)用程序、數(shù)據(jù)存儲(chǔ)和微服務(wù)應(yīng)用程序之外的服務(wù)之間交換信息。

工作原理

Dapr 資源綁定需要通過yaml文件定義綁定組件。此 YAML 文件描述要與其綁定的資源類型。配置后,你的服務(wù)可以接收來自資源的事件或觸發(fā)事件。

輸入綁定

輸入綁定通過外部資源的傳入事件觸發(fā)代碼。下圖的示例中需要在app中保留/tweet接口,以供sidecar調(diào)用

  • Dapr Sidecar讀取綁定配置文件并訂閱為外部資源。?

  • 當(dāng)外部資源觸發(fā)時(shí),在 Dapr sidecar中運(yùn)行的綁定組件會(huì)選取它并觸發(fā)一個(gè)事件。

  • Dapr sidecar調(diào)用指定的接口。在此示例中,服務(wù)在?/tweet?端口6000上偵聽終結(jié)點(diǎn)上的 HTTP POST。由于它是 HTTP POST 操作,因此在請(qǐng)求正文中傳遞事件的 JSON 有效負(fù)載。

  • 處理事件后,服務(wù)將返回 HTTP 狀態(tài)代碼?200 OK?。

  • 輸出綁定

    ?輸出綁定使服務(wù)能夠觸發(fā)調(diào)用外部資源。跟輸入綁定同樣,需要配置描述輸出綁定的綁定配置 YAML 文件。該事件在應(yīng)用程序的 Dapr Sidecar上調(diào)用bingdings API。

  • Dapr sidecar讀取綁定配置文件,其中包含有關(guān)如何連接到外部資源的信息。

  • 應(yīng)用程序調(diào)用sidecar的?/v1.0/bindings/sms?Dapr 終結(jié)點(diǎn)。在這種情況下,它使用 HTTP POST 來調(diào)用 API。還可以使用 gRPC。

  • Dapr sidecar的綁定組件會(huì)調(diào)用外部消息系統(tǒng)來發(fā)送消息。消息將包含 POST 請(qǐng)求中傳遞的負(fù)載。

  • 項(xiàng)目實(shí)例

    此例子中我們使用rabbitmq作為外部資源。因?yàn)閞abbitmq既支持輸入綁定又支持輸出綁定。

    ?首先,在默認(rèn)組件目錄C:\Users\<username>\.dapr\components中新建rabbitbinding.yaml

    apiVersion: dapr.io/v1alpha1 kind: Component metadata:name: RabbitBinding spec:type: bindings.rabbitmqversion: v1metadata:- name: queueNamevalue: queue1- name: hostvalue: amqp://admin:123456@192.168.43.101:5672- name: durablevalue: true- name: deleteWhenUnusedvalue: false- name: ttlInSecondsvalue: 60- name: prefetchCountvalue: 0- name: exclusivevalue: false- name: maxPriorityvalue: 5

    每個(gè)綁定配置都在metadata?中包含常規(guī)元素?name 和?namespace?。Dapr 將根據(jù)配置的?name?字段確定要調(diào)用的服務(wù)的終結(jié)點(diǎn)?。在上面的示例中,Dapr 將在事件發(fā)生是調(diào)用?/RabbitBinding?事件發(fā)生時(shí)調(diào)用方法。

    我們?cè)贔rontEnd中定義RabbitBindingController

    using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging;using System.IO; using System.Text;namespace FrontEnd.Controllers {[Route("[controller]")][ApiController]public class RabbitBindingController : ControllerBase{private readonly ILogger<RabbitBindingController> _logger;public RabbitBindingController(ILogger<RabbitBindingController> logger){_logger = logger;}[HttpPost]public ActionResult Post(){Stream stream = Request.Body;byte[] buffer = new byte[Request.ContentLength.Value];stream.Position = 0L;stream.ReadAsync(buffer, 0, buffer.Length);string content = Encoding.UTF8.GetString(buffer);_logger.LogInformation(".............binding............." + content);return Ok();}} }

    現(xiàn)在我們啟動(dòng)Frontend程序

    https://docs.dapr.io/zh-hans/reference/components-reference/supported-bindings/rabbitmq/

    然后打開RabbitMQ Management,查看Queue,發(fā)現(xiàn)queue1已成功創(chuàng)建

    ?我們先來驗(yàn)證輸入綁定,在RabbitMQ Management中直接發(fā)送消息

    ?現(xiàn)在去控制臺(tái)查看日志,發(fā)現(xiàn)輸入綁定成功觸發(fā)

    == APP == info: FrontEnd.Controllers.RabbitBindingController[0] == APP == .............binding.............1111111122222

    現(xiàn)在我們來驗(yàn)證輸出綁定,在RabbitBindingController中新建接口

    [HttpGet]public async Task<ActionResult> GetAsync([FromServices]DaprClient daprClient){await daprClient.InvokeBindingAsync("RabbitBinding", "create", "9999999");return Ok();}

    為了防止新建的消息被輸入綁定消費(fèi),先把Post方式注釋掉

    //[HttpPost]//public ActionResult Post()//{// Stream stream = Request.Body;// byte[] buffer = new byte[Request.ContentLength.Value];// stream.Position = 0L;// stream.ReadAsync(buffer, 0, buffer.Length);// string content = Encoding.UTF8.GetString(buffer);// _logger.LogInformation(".............binding............." + content);// return Ok();//}

    現(xiàn)在調(diào)用,?查看隊(duì)列queue1中的消息,可看到剛才輸出的消息

    http://localhost:3501/v1.0/invoke/frontend/method/RabbitBinding

    查看結(jié)果

    相關(guān)文章:
    • Dapr實(shí)戰(zhàn)(一) 基礎(chǔ)概念與環(huán)境搭建

    • Dapr + .NET Core實(shí)戰(zhàn)(二) 服務(wù)調(diào)用

    • Dapr + .NET Core實(shí)戰(zhàn)(三)狀態(tài)管理

    • Dapr + .NET 實(shí)戰(zhàn)(四)發(fā)布和訂閱

    • Dapr + .NET 實(shí)戰(zhàn)(五)Actor

    總結(jié)

    以上是生活随笔為你收集整理的Dapr + .NET 实战(六)绑定的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。