Dapr 绑定
提示:以下是本篇文章正文内容,下面案例可供参考
绑定简介以及优势
绑定就是处理外部事件或调用外部接口的功能
dapr中的绑定能给我们带来如下好处:
- 避免连接到消息系统 ( 如队列和消息总线 ) 并进行轮询的复杂性
- 聚焦于业务逻辑,而不是如何与系统交互
- 使代码不受 SDK 或外部库的强耦合
- 处理重试和故障恢复
dapr中的绑定分为三种
- 输入绑定,处理外部事件
- 输出绑定,触发外部事件
- Cron绑定,定时触发内部程序
输出绑定
- 新增rabbitmq-input-binding.yaml,写入以下代码:
apiVersion: dapr.io/v1alpha1 kind: Component metadata: name: api/RabbitBinding spec: type: bindings.rabbitmq version: v1 metadata: - name: queueName value: queue-for-input-binding - name: host value: amqp://guest:guest@192.168.11.12:5672
- 新建RabbitBindingController,写入以下代码:
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(); }
- 启动测试
- 启动FrontEnd
dapr run --dapr-http-port 3501 --app-port 5001 --app-id frontend dotnet .\FrontEnd\bin\Debug\net6.0\FrontEnd.dll
- 启动FrontEnd
- 打开RabbitMQ Management,找到queue-for-input-binding,发布一条消息
- 可以看到控制台已经打印出上一步发送的消息
输出绑定
- 新增rabbitmq-output-binding.yaml,写入以下代码:
apiVersion: dapr.io/v1alpha1 kind: Component metadata: name: api/RabbitBinding/output spec: type: bindings.rabbitmq version: v1 metadata: - name: queueName value: queue-for-output-binding - name: host value: amqp://guest:guest@192.168.11.12:5672
- RabbitBindingController中写入以下代码:
// 新增触发输出绑定接口 [HttpGet("output")] public async Task<ActionResult> OutputAsync([FromServices] DaprClient daprClient) { await daprClient.InvokeBindingAsync("api/RabbitBinding/output", "create", "111111111"); return Ok(); }
- 启动测试
- 启动FrontEnd
dapr run --dapr-http-port 3501 --app-port 5001 --app-id frontend dotnet .\FrontEnd\bin\Debug\net6.0\FrontEnd.dll
- 启动FrontEnd
- 打开RabbitMQ Management,找到queue-for-output-binding,可以看到已经接收到了一条消息
Cron绑定
- 新增rabbitmq-cron-binding.yaml,写入以下代码:
apiVersion: dapr.io/v1alpha1 kind: Component metadata: name: api/RabbitBinding/cron spec: type: bindings.cron version: v1 metadata: - name: schedule value: "@every 5s" # 每5s执行一次
- RabbitBindingController中写入以下代码:
//测试cron绑定 [HttpPost("cron")] public ActionResult Cron() { _logger.LogInformation(".............corn binding............."); return Ok(); }
- 启动测试
- 启动FrontEnd
dapr run --dapr-http-port 3501 --app-port 5001 --app-id frontend dotnet .\FrontEnd\bin\Debug\net6.0\FrontEnd.dll
- 启动FrontEnd
- 打开控制台可以看到每隔5秒钟就执行了一次