Apache Beam:是否可以使用交换和路由密钥来消耗RabbitMQ的消息

时间:2018-12-26 09:44:27

标签: rabbitmq apache-beam

我在Apache Beam中定义了一个管道,以使用RabbitMQ消息代理中给定队列的消息。

我在RabbitMQ中定义了交换和路由密钥。

我在Beam(版本2.9.0)中使用了AmqpIO.read(),但没有找到用于设置交换和路由键的任何API。

(此文档之后:https://beam.apache.org/releases/javadoc/2.4.0/org/apache/beam/sdk/io/amqp/AmqpIO.html

有可能这样做吗?即使使用任何其他插件。

关于, 阿里

1 个答案:

答案 0 :(得分:0)

最新v2.9.0 Apache Beam发行版中提供了一个用于RabbitMQ的新(实验)IO连接器。 AMQP连接器不适用于RabbitMQ。

如果使用的是Maven,则在POM中添加以下依赖项

<!-- Beam MongoDB I/O -->
<dependency>
    <groupId>org.apache.beam</groupId>
    <artifactId>beam-sdks-java-io-mongodb</artifactId>
    <version>2.9.0</version>
</dependency>

,您可以在

之类的管道中使用它
public class RabbitMQPipeline {

final static Logger log = LoggerFactory.getLogger(RabbitMQPipeline.class);

/**
 * Mongo Pipeline options.
 */
public interface RabbitMQPipelineOptions extends PipelineOptions {

    @Description("Path of the file to read from")
    @Default.String("amqp://localhost")
    @Required
    String getUri();

    void setUri(String uri);

}

/**
 * @param args
 */
public static void main(String[] args) {

    RabbitMQPipelineOptions options = PipelineOptionsFactory.fromArgs(args).withValidation()
            .as(RabbitMQPipelineOptions.class);

    Pipeline pipeline = Pipeline.create(options);

    PCollection<RabbitMqMessage> messages = pipeline
            .apply(RabbitMqIO2.read().withUri(options.getUri()).withQueue("test"));

    messages.apply(ParDo.of(new DoFn<RabbitMqMessage, String>() {
        @ProcessElement
        public void process(@Element RabbitMqMessage msg) {
            System.out.println(msg.toString());
        }
    }));

    pipeline.run().waitUntilFinish();
}

}

RabbitMqIO Javadoc包含有关如何使用读取器和写入器的示例。

请注意

已经修复了known bug,但计划在v2.11.0中发布该m2-apt Maven plugin,即使在最简单的情况下,该连接器也无法正常工作。修复非常简单(请参见JIRA问题),但是您将需要重建该类的新版本。如果您想尝试一下,请确保添加以下Maven依赖项

<dependency>
    <groupId>com.google.auto.value</groupId>
    <artifactId>auto-value</artifactId>
    <version>1.5.2</version>
    <scope>provided</scope>
</dependency>

并在Maven编译器插件中添加以下配置

<plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.6.1</version>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
            <annotationProcessors>
        <annotationProcessor>com.google.auto.value.processor.AutoValueProcessor</annotationProcessor>
            </annotationProcessors>
        </configuration>
    </plugin>

如果使用的是Eclipse,请确保安装enter image description here。祝你好运!