首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不使用Dapr发布/子示例的RabbitMQ的Dapr绑定

不使用Dapr发布/子示例的RabbitMQ的Dapr绑定
EN

Stack Overflow用户
提问于 2020-12-30 18:53:28
回答 1查看 1.5K关注 0票数 1

我使用了Dapr pub/sub样品并尝试更新它以使用RabbitMQ

我已经从DockerHub下载了DockerHub:3图像,它应该正在收听amqp://localhost:5672。

我为RabbitMQ创建了一个名为rabbitmq.yaml的新组件文件,并将其放置在. .dapr/components目录中。我对RabbitMQ的组件配置是:

代码语言:javascript
复制
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: my-rabbitmq
spec:
  type: pubsub.rabbitmq
version: v1
metadata:
  - name: host
    value: amqp://localhost:5672
  - name: durable
    value: true # Optional. Default: "false"
  - name: deletedWhenUnused
   value: false # Optional. Default: "false"
  - name: ttlInSeconds
    value: 60
  - name: prefetchCount
    value: 0

我的订阅定义在位于同一个. .dapr/components目录中的订阅-rabbitmq.yaml中。它看起来如下:

代码语言:javascript
复制
apiVersion: dapr.io/v1alpha1
kind: Subscription
metadata:
  name: rabbitmq-subscription
spec:
  topic: deathStarStatus
  route: /dsstatus
  pubsubname: my-rabbitmq
scopes:
- app2

当我使用Redis组件和订阅运行示例时,节点应用程序接收消息并显示在dapr命令的输出中。

dapr publish --topic deathStarStatus --pubsub pubsub --data '{ "message": "This is a test" }'

但是当我向RabbitMQ发布消息时,它会声明“已成功发布的事件”,但是节点应用程序没有收到消息。

dapr publish --topic deathStarStatus --pubsub my-rabbitmq --data '{ "message": "This is a test" }'

下面是节点应用程序和运行它的命令:

dapr run --app-id app2 --app-port 3000 node app2.js

代码语言:javascript
复制
const express = require('express')
const bodyParser = require('body-parser')
const app = express()
app.use(bodyParser.json({ type: 'application/*+json' }));

const port = 3000

// app.get('/dapr/subscribe', (req, res) => {
//     res.json([
//         {
//             pubsubname: "my-rabbitmq",
//             topic: "deathStarStatus",
//             route: "dsstatus"        
//         }
//     ]);
// })

app.post('/dsstatus', (req, res) => {
    console.log(req.body);
    res.sendStatus(200);
});

app.listen(port, () => console.log(`consumer app listening on port ${port}!`))

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-12 17:28:02

事实证明,RabbitMQ (Dapr world)中的“主题”实际上是一个Exchange,而不是队列。

当运行带有app2订阅的“RabbitMQ”时,将使用预先添加的appid (例如{appid}-{queueName})创建队列,但没有创建RabbitMQ。不确定这是通过设计还是我的特定配置。

最后,我创建了一个名为"deathStarStatus“的Exchange,并将该Exchange映射到名为"app2-deathStarStatus”的队列中,一切都正常。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65512137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档