[GENERAL]
От | Yason TR |
---|---|
Тема | [GENERAL] |
Дата | |
Msg-id | trinity-53fe0e2d-0db1-4e0d-b4ee-19d1c216bab8-1505828068652@3c-app-mailcom-bs15 обсуждение исходный текст |
Список | pgsql-general |
Hi all, I am developing an application which connects to a logical replication slot, to consume the WAL events. These WAL eventsare then forwarded to a MQ broker. The heart of the code can be seen as: while (true) { Connection connection = null; PGReplicationStream stream = null; try { connection = DriverManager.getConnection("jdbc:postgresql://localhost:5432/db", properties); stream= connection.unwrap(PGConnection.class).getReplicationAPI().replicationStream().logical().withSlotName("slot").start(); while (true) { final ByteBuffer buffer = stream.read(); // ... MQ logic here ... omitted ... stream.setAppliedLSN(stream.getLastReceiveLSN()); stream.setFlushedLSN(stream.getLastReceiveLSN()); } } catch (final SQLException e) { // ... log exception... omitted ... } finally { // ... close stream and connection ... omitted ... }} I notice some behavior which I cannot explain and would like to understand so I can alter my code: - When I restart the application, I notice that the application is retrieving the last event from the previous run again.The result is that this event is sent twice to the MQ broker after a restart of the application. Why is that? Isn'tcalling `setAppliedLSN(stream.getLastReceiveLSN())` and/or `setFlushedLSN(stream.getLastReceiveLSN())` enough to acknowledgean event, so it will removed from the WAL log and it will not be resent? - When receiving an event, the corresponding LSN from that event (which is sent in the payload) is not the same as the resultof `stream.getLastReceivedLSN()`. Why is that? Which one should I use? Maybe this is correlated to my first question. - What is the difference between `setAppliedLSN(LSN)` and `setFlushedLSN(LSN)`? The Javadocs are not really helpful here. FYI, I also asked this question on https://stackoverflow.com/questions/46301578/postgres-jdbc-logical-replication-lsn-feedback. Thanks a lot and kind regards, Yason TR -- Sent via pgsql-general mailing list (pgsql-general@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-general
В списке pgsql-general по дате отправления: