Flink接收RabbitMQ数据写入到Oracle

文件内容

FlinkMain.java

import org.apache.flink.api.common.serialization.SimpleStringSchema;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
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;

public class FlinkMain
{
    public static void main(String[] args) throws Exception
    {
        // 1,执行环境
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

        // 2,RabbitMQ配置
        RMQConnectionConfig connectionConfig = new RMQConnectionConfig.Builder()
                .setHost("192.168.1.3")
                .setPort(5673)
                .setUserName("panfeng")
                .setPassword("panfeng")
                .setVirtualHost("/panfeng")
                .build();

        // 3,添加资源
        DataStreamSource<String> dataStreamSource = env.addSource(new RMQSource<String>(
                connectionConfig,
                "flink",
                true,
                new SimpleStringSchema()));

        // 4,添加到流,去执行接收到的数据进行入库
        dataStreamSource.addSink(new SinkOracle());

        // 5,执行工作,定义一个工作名称
        env.execute("rabbitmq flink oracle");
    }
}

SinkOracle.java

import org.apache.flink.configuration.Configuration;
import org.apache.flink.streaming.api.functions.sink.RichSinkFunction;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;

public class SinkOracle extends RichSinkFunction<String>
{
    private Connection connection;
    private PreparedStatement statement;

    // 1,初始化
    @Override
    public void open(Configuration parameters) throws Exception
    {
        super.open(parameters);
        Class.forName("oracle.jdbc.OracleDriver");
        connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "123456");
        statement = connection.prepareStatement("INSERT INTO FLINK VALUES (SEQ_FLINK.NEXTVAL,?)");
    }

    // 2,执行
    @Override
    public void invoke(String value, Context context) throws Exception
    {
        System.out.println("value.toString()-------" + value.toString());
        statement.setString(1, value);
        statement.execute();
    }

    // 3,关闭
    @Override
    public void close() throws Exception
    {
        super.close();
        if (statement != null)
            statement.close();
        if (connection != null)
            connection.close();
    }
}

pom.xml

<dependencies>
        <!--flink-java-->
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-java</artifactId>
            <version>1.9.0</version>
        </dependency>

        <!--flink-streaming-java_2.11-->
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-streaming-java_2.11</artifactId>
            <version>1.9.0</version>
        </dependency>

        <!--flink-connector-rabbitmq_2.11-->
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-connector-rabbitmq_2.11</artifactId>
            <version>1.9.0</version>
        </dependency>

        <!--Oracle-->
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc8</artifactId>
            <version>12.2.0.1.0</version>
        </dependency>
    </dependencies>

测试步骤

执行 Flink.java中的主方法,往对应队列中传入数据,可以输入到控制台

猜你喜欢

转载自www.cnblogs.com/taopanfeng/p/11684912.html