Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 弗林克兔_Java_Rabbitmq_Apache Flink_Flink Streaming - Fatal编程技术网

Java 弗林克兔

Java 弗林克兔,java,rabbitmq,apache-flink,flink-streaming,Java,Rabbitmq,Apache Flink,Flink Streaming,我试图理解如何在Flink和RabbiMQ中使用高可用性,使用关联ID并启用检查点,但这是行不通的。我的制作人代码: connection = factory.newConnection(); Channel channel = connection.createChannel(); String corrId = java.util.UUID.randomUUID().toString(); BasicProperties props = new AMQP.BasicProperties()

我试图理解如何在Flink和RabbiMQ中使用高可用性,使用关联ID并启用检查点,但这是行不通的。我的制作人代码:

connection = factory.newConnection();
Channel channel = connection.createChannel();

String corrId = java.util.UUID.randomUUID().toString();
BasicProperties props = new AMQP.BasicProperties().builder().correlationId(corrId).build();

channel.queueDeclare("flink-poc", true, false, false, null);
MessageQueue queue = new MessageQueue(500); //Queue of messages to be sent to rabbitmq
Message msg = null;
while ((msg = queue.takeMessage()) != null) 
    channel.basicPublish("", "flink-poc", props, mapper.writeValueAsBytes(msg));
channel.close();
connection.close();
消费者代码:

StreamExecutionEnvironment env = StreamExecutionEnvironment
            .getExecutionEnvironment();
env.setBufferTimeout(100);
env.enableCheckpointing(1000,CheckpointingMode.EXACTLY_ONCE); // start a checkpoint every 1000 ms
env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime);

RabbitSource<Message> rabbitSource = new RabbitSource<Message>(Host, 5672, username, pass,  "flink-poc", VirtualHost, true, schema);
messages = env.addSource(rabbitSource, TypeInformation.of(Message.class)
StreamExecutionEnvironment env=StreamExecutionEnvironment
.getExecutionEnvironment();
环境设置超时(100);
环境启用检查点(1000,检查点模式。一次即可);//每1000毫秒启动一个检查点
环境setStreamTimeCharacteristic(TimeCharacteristic.EventTime);
RabbitSource RabbitSource=新的RabbitSource(主机,5672,用户名,密码,“flink poc”,虚拟主机,true,模式);
messages=env.addSource(rabbitSource,TypeInformation.of(Message.class)
使用此代码,不会向RabbitMQ返回任何ACK。非常感谢您的帮助


更新:带有预回迁(
channel.basicQos(15);
),它开始工作,但速率很低。有什么方法可以改进它吗?如果禁用了
setStreamTimeCharacteristic
,结果会被排序,速率会提高10倍,但速率仍然很低,这怎么可能呢?

如果对所有消息使用相同的correlationId,则必须对每条消息使用新的correlationId。From“usesCorrelationId-是否为接收到的消息提供了唯一的id以消除重复消息(在确认失败的情况下)。仅在启用检查点时使用。”

谢谢j s,我非常着迷于观看其余代码和API,以至于没有注意到更重要的细节。