为了账号安全,请及时绑定邮箱和手机立即绑定

无法使用 RabbitMQ (RPC) 和 Apache Camel 进行简单的请求

无法使用 RabbitMQ (RPC) 和 Apache Camel 进行简单的请求

Go
慕姐4208626 2023-03-07 17:04:22
我希望你一切都好!首先,我是 EIP 世界的新手。我正在尝试做一个简单的请求回复:一个 Golang rabbitMQ 客户端Kotlin 中的 apache Camel 路由充当 RabbitMQ 服务器我试图阅读所有可能的文档并搜索答案,但我什么也没找到。我基本上是绝望的。主要是我看到了这个,但还没有任何效果。我的目标是像图像一样进行同步请求-回复。我的 Golang 客户端如下所示:func (r *RabbitMQConn) GetQueue(name string) *amqp.Queue {    ch := r.GetChannel()    defer ch.Close()    q, err := ch.QueueDeclare(        name,        false,        false,        true,        false,        nil,    )    if err != nil {        panic(err)    }    return &q}func (r *RabbitMQConn) PublishAndWait(routingKey string, correlationId string, event domain.SyncEventExtSend) (domain.SyncEventExtReceive, error) {    message, err := json.Marshal(event)    if err != nil {        return domain.SyncEventExtReceive{}, apperrors.ErrInternal    }    ch := r.GetChannel()    defer ch.Close()    q := r.GetQueue("response")    h, err := ch.Consume(        q.Name,        "",        true,        false,        false,        false,        nil,    )    if err != nil {        return domain.SyncEventExtReceive{}, err    }    ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)    defer cancel()    err = ch.PublishWithContext(        ctx,        "",        routingKey,        false,        false,        amqp.Publishing{            ContentType:   "application/json",            Body:          message,            CorrelationId: correlationId,            ReplyTo:       q.Name,        },    )    if err != nil {        return domain.SyncEventExtReceive{}, err    }    for d := range h {        fmt.Println("Received a message:", string(d.Body))        if d.CorrelationId == correlationId {            var event domain.SyncEventExtReceive            err = json.Unmarshal(d.Body, &event)            return event, err        }    }    return domain.SyncEventExtReceive{}, apperrors.ErrInternal}基本上,只是使用命名响应队列从默认交换中消费。此外,我将队列名称作为ReplyTo参数发送,并为其提供相关 ID。发送的路由密钥是daily-weather在这种情况下。我问是否有人有任何简单的例子可以用 Apache Camel 做到这一点,因为我非常迷茫。如果您与我联系,可以分享任何进一步的细节。
查看完整描述

1 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞

解决了

你好!一段时间后,我决定看一下spring-rabbitmq Camel 组件。我意识到 Camel 有exchange patterns,而 rabbitmq 默认设置为inOut. 这样,自动将信息返回给属性replyTo

  val RABBIMQ_ROUTE =
      "spring-rabbitmq:default?queues={{rabbitmq.weather.daily.routing_key}}"

default指的是默认交换队列。


查看完整回答
反对 回复 2023-03-07
  • 1 回答
  • 0 关注
  • 148 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号