首页 文章

骆驼 生产环境 者消费混乱

提问于
浏览
9

Camel in Action 书中对 生产环境 者和消费者的定义对我来说有点混乱 . 我不是那样的 .

生产环境 者是Camel抽象,指的是能够创建消息并将消息发送到 endpoints 的实体 . 图1.10说明了 生产环境 者适应其他Camel概念的位置 . 当需要将消息发送到 endpoints 时, 生产环境 者将创建交换并使用与该特定 endpoints 兼容的数据填充它 . 例如,FileProducer会将消息正文写入文件 . 另一方面,JmsProducer会将Camel消息映射到javax.jms.Message,然后再将其发送到JMS目标 . 这是Camel的一个重要特性,因为它隐藏了与特定传输交互的复杂性 . 使用者是接收 生产环境 者生成的消息的服务,将它们包装在交换中,然后发送它们进行处理 . 消费者是在Camel中路由交换的来源 . 回顾图1.10,我们可以看到消费者在其他Camel概念中的位置 . 要创建新的交换,消费者将使用包装正在使用的有效负载的 endpoints . 然后使用处理器使用路由引擎启动Camel中的交换路由 .

谁在创建交易所?典型的沟通渠道的哪一方是 生产环境 者和消费者?从上面的文字中我无法确定谁对此负责 . 如果有人可以提供图片(书中的图片对我来说不清楚),那将是很好的,其中究竟是 生产环境 者和消费者,并解释他们如何以简单的方式工作 . 也许一些例子也很有用 .

好吧也许最好举一个例子,有人可以告诉我它是如何工作的 . 想象一下,我们想要从文件夹中获取文件并将它们放在JMS队列中,然后从那里发送它们以进行进一步处理,最终保存在磁盘上 .

根据我的照片, 生产环境 者,消费者到底在哪里?我意识到什么是组件和 endpoints .

2 回答

  • 6

    也许the javadoc for Exchange class将为您澄清所有权 . 以下是回答关于谁创建Exchange的问题的片段:

    消费者收到请求时创建Exchange . 创建一个新消息,将请求设置为消息正文,并根据消费者的其他 endpoints 和协议相关信息添加为消息的 Headers . 然后创建一个Exchange,并将新创建的Message设置为Exchange上的in . 因此,交易所在消费者中开始其生活 .

  • 6

    你或多或少对你的怀疑是正确的 . 举个简单的例子:

    CamelContext camelContext = new DefaultCamelContext();
    camelContext.addRoutes(new RouteBuilder() {
      @Override
      public void configure() {
        from("file:data/inbox?noop=true") // consumer
          .to("file:data/outbox");        // producer
      }
    });
    camelContext.start();
    Thread.sleep(2000);
    camelContext.stop();
    

    在这个例子中,我们使用 RouteBuilder 来创建 Route ,一旦 CamelContext 启动,它执行如下:

    • 创建两个 FileComponent 来表示两个位置 .

    • 通过查询以前的组件创建相应的 FileEndpoint .

    • 创建 FileConsumer 以从 data/inbox 读取 .

    • 创建 GenericFileProducer 以写入 data/outbox .

    • 手控制到 FileConsumer 以从其目录开始轮询文件,该文件指示其 Endpoint 创建 Exchange (如图中所示) . GenericFileMessage 绑定到 Exchange .

    • Exchange 被移交给 FileProducer .

    从该视图来看, Consumer 不会创建任何交换 . 我想,在本书的这个阶段它还没有意义 . 这反映在文本中 . 但是,查看实现,当您查看代码时,两者都是等效的:

    Consumer 在发送消息时使用了一些 Processor ,在这种情况下,由 Consumer 表示,然后由 Consumer 查询以生成 ExchangeConsumer 查询其 Endpoint ,然后创建实际的 Exchange .

相关问题