Beispiel #1
0
  public Message getWithoutAck(int batchSize) throws CanalClientException {
    waitClientRunning();
    try {
      int size = (batchSize <= 0) ? 1000 : batchSize;
      writeWithHeader(
          channel,
          Packet.newBuilder()
              .setType(PacketType.GET)
              .setBody(
                  Get.newBuilder()
                      .setDestination(clientIdentity.getDestination())
                      .setClientId(String.valueOf(clientIdentity.getClientId()))
                      .setFetchSize(size)
                      .build()
                      .toByteString())
              .build()
              .toByteArray());
      //
      Packet p = Packet.parseFrom(readNextPacket(channel));
      switch (p.getType()) {
        case MESSAGES:
          {
            if (!p.getCompression().equals(Compression.NONE)) {
              throw new CanalClientException("compression is not supported in this connector");
            }

            Messages messages = Messages.parseFrom(p.getBody());
            Message result = new Message(messages.getBatchId());
            for (ByteString byteString : messages.getMessagesList()) {
              result.addEntry(Entry.parseFrom(byteString));
            }
            return result;
          }
        case ACK:
          {
            Ack ack = Ack.parseFrom(p.getBody());
            throw new CanalClientException(
                "something goes wrong with reason: " + ack.getErrorMessage());
          }
        default:
          {
            throw new CanalClientException("unexpected packet type: " + p.getType());
          }
      }
    } catch (IOException e) {
      throw new CanalClientException(e);
    }
  }