网站制作公司多少钱,聊城高端网站设计建设,响应式网站上海有多少家,外贸网站 源绑定有点像订阅发布#xff0c;但又不一样#xff0c;绑定更简单#xff0c;绑定输出#xff08;调用方#xff09;-绑定输入#xff08;被调用方#xff09;。本例是用docker compose编排#xff0c;并且用rabbitMQ来支持#xff0c;因为rabbitMQ支持输入和输出绑定。… 绑定有点像订阅发布但又不一样绑定更简单绑定输出调用方-绑定输入被调用方。本例是用docker compose编排并且用rabbitMQ来支持因为rabbitMQ支持输入和输出绑定。demo的目录结构 binding.yaml放在components目录下apiVersion: dapr.io/v1alpha1
kind: Component
metadata:name: orderupdate
spec:type: bindings.rabbitmqversion: v1metadata:- name: queueNamevalue: bindQueue- name: hostvalue: amqp://admin:!2021querabbitmq:5672- name: durablevalue: true- name: deleteWhenUnusedvalue: false- name: ttlInSecondsvalue: 60- name: prefetchCountvalue: 0- name: exclusivevalue: false- name: maxPriorityvalue: 5B2C目录中的docker-compose.ymlversion: 3.4services:#┌────────────────────────────────┐#│ ordersystem app Dapr sidecar │#└────────────────────────────────┘ordersystem:image: ${DOCKER_REGISTRY-}ordersystemdepends_on:- redis- placement build:context: ../dockerfile: OrderSystem/Dockerfileports:- 3500:3500volumes: - ../OrderSystem:/OrderSystem networks:- b2c-daprordersystem-dapr:image: daprio/daprd:latestcommand: [ ./daprd, -app-id, order, -app-port, 80,-placement-host-address, placement:50006,-components-path,/components]depends_on:- ordersystemnetwork_mode: service:ordersystemvolumes: - ../components:/components #┌───────────────────────────────────┐#│ paymentsystem1 app Dapr sidecar │#└───────────────────────────────────┘ paymentsystem1:image: ${DOCKER_REGISTRY-}paymentsystemdepends_on:- redis- placement - rabbitmq build:context: ../dockerfile: PaymentSystem/Dockerfileports:- 3601:3500volumes: - ../PaymentSystem:/PaymentSystem networks:- b2c-dapr paymentsystem1-dapr:image: daprio/daprd:latestcommand: [ ./daprd, -app-id, pay, -app-port, 80,-placement-host-address, placement:50006,-components-path,/components ]depends_on:- paymentsystem1network_mode: service:paymentsystem1volumes: - ../components:/components #┌───────────────────────────────────┐#│ paymentsystem2 app Dapr sidecar │#└───────────────────────────────────┘ paymentsystem2:image: ${DOCKER_REGISTRY-}paymentsystemdepends_on:- redis- placement - rabbitmq build:context: ../dockerfile: PaymentSystem/Dockerfilevolumes: - ../PaymentSystem:/PaymentSystem ports:- 3602:3500networks:- b2c-dapr paymentsystem2-dapr:image: daprio/daprd:latestcommand: [ ./daprd, -app-id, pay, -app-port, 80 ,-placement-host-address, placement:50006,-components-path,/components]depends_on:- paymentsystem2network_mode: service:paymentsystem2volumes: - ../components:/components #┌───────────────────────────────────┐#│ noticesystem1 app Dapr sidecar │#└───────────────────────────────────┘ noticesystem1:image: ${DOCKER_REGISTRY-}noticesystemdepends_on:- redis- placement - rabbitmq build:context: ../dockerfile: NoticeSystem/Dockerfileports:- 3701:3500volumes: - ../NoticeSystem:/NoticeSystem networks:- b2c-dapr noticesystem1-dapr:image: daprio/daprd:latestcommand: [ ./daprd, -app-id, notice, -app-port, 80,-placement-host-address, placement:50006,-components-path,/components ]depends_on:- noticesystem1network_mode: service:noticesystem1volumes: - ../components:/components #┌───────────────────────────────────┐#│ noticesystem2 app Dapr sidecar │#└───────────────────────────────────┘ noticesystem2:image: ${DOCKER_REGISTRY-}noticesystemdepends_on:- redis- placement - rabbitmq build:context: ../dockerfile: NoticeSystem/Dockerfileports:- 3702:3500volumes: - ../NoticeSystem:/NoticeSystem networks:- b2c-dapr noticesystem2-dapr:image: daprio/daprd:latestcommand: [ ./daprd, -app-id, notice, -app-port, 80,-placement-host-address, placement:50006,-components-path,/components ]depends_on:- noticesystem2network_mode: service:noticesystem2volumes: - ../components:/components #┌────────────────────────┐#│ Dapr placement service │#└────────────────────────┘ placement:image: daprio/daprcommand: [./placement, -port, 50006]ports:- 50006:50006networks:- b2c-dapr#┌───────────────────┐#│ Redis state store │#└───────────────────┘ redis:image: redis:latestports:- 6380:6379networks:- b2c-dapr#┌──────────────────────┐#│ RabbitMQ state store │#└──────────────────────┘ rabbitmq:image: rabbitmq:managementports:- 15672:15672- 5672:5672 environment:- RABBITMQ_DEFAULT_USERadmin- RABBITMQ_DEFAULT_PASS!2021que networks:- b2c-dapr networks:b2c-dapr:在PaymentSystem和NoticeSystem添加监听传入的事件[HttpPost(/orderupdate)]
public async TaskIActionResult OrderUpdate()
{_logger.LogInformation(NoticeSystem OrderUpdate……);using var reader new StreamReader(Request.Body, System.Text.Encoding.UTF8);var content await reader.ReadToEndAsync();_logger.LogInformation(content);return Ok();
}启动 docker-compose up -d会发现所有的挎斗都失败如下图查看日志发现是rabbitMQ的5672没有连接成功绑过一段分析配置和代码都没有问题 问题 出现在时差上虽然在docker-compose中配置了所有服务依赖rabbitMQ但rabbitMQ的容器虽然启动了但rabbitMQ服务还没有完全启动起来这个时间挎斗连接时就发生连接错误可以等上一会手动再次启动挎斗容器就可以了。这块在生产上需要解决不能每次都手动服务都启动后可以测试了调用绑定http://localhost:3601/v1.0/bindings/orderupdate需要用post一个json来调用绑定分别post了包含10个1 10个210个310个4的四个请求四个请求会分别触发四个服务的orderupdate事件这里orderupdate业务不太适合用绑定应该用发布订阅因为一个订单变是多PaymentSystem和NoticeSystem都应该被通知到但绑定事件不可以这也是两者的区别