public void UnSubscribe() { WaitClientRunning(); if (!_running) { return; } try { var unsub = new Unsub() { Destination = _clientIdentity.Destination, ClientId = _clientIdentity.ClientId.ToString(), }; var pack = new Packet() { Type = PacketType.Unsubscription, Body = unsub.ToByteString() }.ToByteArray(); WriteWithHeader(pack); var p = Packet.Parser.ParseFrom(ReadNextPacket()); var ack = Com.Alibaba.Otter.Canal.Protocol.Ack.Parser.ParseFrom(p.Body); if (ack.ErrorCode > 0) { throw new CanalClientException($"failed to unSubscribe with reason: {ack.ErrorMessage}"); } } catch (IOException e) { throw new CanalClientException(e.Message, e); } }
public async Task UnSubscribe_ShouldBe_Success() { InitClient(); await HandShake_ShouldBe_Success(); await Auth_ShouldBe_Success(); await Subscribe_ShouldBe_Success(); var data = new Unsub() { Destination = Settings.Destination, ClientId = Settings.ClientId, Filter = string.IsNullOrEmpty(Settings.Filter) ? ".*\\..*" : Settings.Filter }; var pack = new Packet() { Type = PacketType.Subscription, Body = data.ToByteString() }.ToByteArray(); await _client.WritePacketAsync(pack); var p = await _client.ReadPacketAsync(); p.ValidateAck(); }
/// <summary> /// UnSubscribe. If you need to unsubscribe, you should stop receiving data first. /// </summary> /// <param name="filter">UnSubscribe filter(Optional, default value is '.*\\..*')</param> /// <returns></returns> public async Task UnSubscribeAsync(string filter = ".*\\..*") { ValidateState(ConnectionState.Subscribed, nameof(UnSubscribeAsync)); //Unsub data var data = new Unsub() { Destination = _options.Destination, ClientId = _options.ClientId, Filter = filter }; var pack = new Packet() { Type = PacketType.Subscription, Body = data.ToByteString() }.ToByteArray(); await _client.WritePacketAsync(pack); var p = await _client.ReadPacketAsync(); p.ValidateAck(); SetConnectionState(ConnectionState.Unsubscribed); _logger.LogInformation($"UnSubscribe {filter} success."); }