Flink 系例 之 Connectors 连接 RabbitMq

本文介绍如何利用Flink DataStream Connectors实现与RabbitMQ的消息交互,包括从RabbitMQ读取数据到Flink数据流及将Flink数据流输出至RabbitMQ。示例代码展示了配置细节及具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过使用 Flink DataStream Connectors 数据流连接器连接到 RabbitMq 消息队列中间件,并提供数据流输入与输出操作;

示例环境

java.version: 1.8.x
flink.version: 1.11.1
rabbitMq:3.5.7

示例数据源 (项目码云下载)

Flink 系例 之 搭建开发环境与数据

示例模块 (pom.xml)

Flink 系例 之 DataStream Connectors 与 示例模块

数据流输入

DataStreamSource.java

package com.flink.examples.rabbitmq;

import org.apache.flink.api.common.serialization.SimpleStringSchema;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.connectors.rabbitmq.RMQSource;
import org.apache.flink.streaming.connectors.rabbitmq.common.RMQConnectionConfig;

/**
 * @Description 从MQ中获取数据并输出到DataStream流中
 */publicclassDataStreamSource{

    /**
     * 官方文档:https://ci.apache.org/projects/flink/flink-docs-release-1.11/zh/dev/connectors/rabbitmq.html
     */publicstatic void main(String[] args) throwsException {
        finalStreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        RMQConnectionConfig connectionConfig = new RMQConnectionConfig.Builder()
                .setHost("127.0.0.1")
                .setPort(5672)
                .setUserName("admin")
                .setPassword("admin")
                .setVirtualHost("datastream")
                .build();

        finalDataStream<String> stream = env
                .addSource(new RMQSource<String>( connectionConfig, "test", true, new SimpleStringSchema()))
                .setParallelism(1);

        stream.print();
        env.execute("flink rabbitMq source");
    }
}

数据流输出

DataStreamSink.java

package com.flink.examples.rabbitmq;

import org.apache.flink.api.common.serialization.SimpleStringSchema;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.connectors.rabbitmq.RMQSink;
import org.apache.flink.streaming.connectors.rabbitmq.common.RMQConnectionConfig;

/**
 * @Description 将DataStream流中的数据输出到rabbitMq队列中
 */publicclassDataStreamSink{

    /**
     * 官方文档:https://ci.apache.org/projects/flink/flink-docs-release-1.11/zh/dev/connectors/rabbitmq.html
     */publicstaticvoidmain(String[] args)throws Exception {
        final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        RMQConnectionConfig connectionConfig = new RMQConnectionConfig.Builder()
                .setHost("127.0.0.1")
                .setPort(5672)
                .setUserName("admin")
                .setPassword("admin")
                .setVirtualHost("datastream")
                .build();

        String [] words = new String[]{"props","student","build","name","execute"};
        final DataStream<String> stream = env.fromElements(words);
        stream.addSink(new RMQSink<String>(connectionConfig,"test",new SimpleStringSchema()));
        env.execute("flink rabbitMq sink");
    }
}

数据展示

### 配置和使用 RabbitMQ 作为 Apache Flink 的数据源 为了使 RabbitMQ 成为 Apache Flink 的数据源,需先确保项目中已加入必要的依赖项。具体来说,在 `pom.xml` 文件里应添加如下所示的 Maven 依赖来引入 Flink-RabbitMQ 连接器[^3]: ```xml <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-connector-rabbitmq_2.12</artifactId> <version>${flink.version}</version> </dependency> ``` 完成上述设置之后,可以通过创建自定义的数据源类实现从 RabbitMQ 中获取数据的功能。此过程涉及实化 `RMQSource` 类并配置相应的参数,比如主机名、端口号以及队列名称等信息。 下面是一段简单的 Java 代码片段展示如何构建基于 RabbitMQFlink 流应用程序: ```java import org.apache.flink.api.common.serialization.SimpleStringSchema; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.streaming.connectors.rabbitmq.RMQConnectionConfig; import org.apache.flink.streaming.connectors.rabbitmq.RMQSource; public class RabbitMqFlinkExample { public static void main(String[] args) throws Exception { final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); RMQConnectionConfig connectionConfig = new RMQConnectionConfig.Builder() .setHost("localhost") // 设置RabbitMQ服务器地址 .setPort(5672) // 设置RabbitMQ服务监听端口,默认为5672 .setVirtualHost("/") // 虚拟主机路径 .setUserName("guest") // 登录用户名 .setPassword("guest") // 密码 .build(); DataStream<String> stream = env.addSource( new RMQSource<>(connectionConfig, "testQueue", true, new SimpleStringSchema()) ); stream.print().setParallelism(1); env.execute("Flink Streaming from RabbitMQ"); } } ``` 这段程序首先初始化了一个执行环境 (`env`) ,接着通过给定的连接配置对象 (`connectionConfig`) 和目标队列名 ("testQueue") 来建立一个来自 RabbitMQ 的输入流(`stream`). 使用 `SimpleStringSchema()` 对象指定了消息解析方式—这里假设所有收到的消息都是字符串形式. 最后调用了 `print()` 方法将接收到的信息打印出来,并设置了并行度为1以保证顺序输出;当然也可以根据实际需求调整这些选项.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值