}); receiver.closeHandler(x -> { receiver.close(); receiver.free();
/** * Initializes common fixture. */ @Before public void setUp() { receiver = mock(ProtonReceiver.class); when(receiver.handler(any())).thenReturn(receiver); when(receiver.closeHandler(any())).thenReturn(receiver); when(receiver.setAutoAccept(any(Boolean.class))).thenReturn(receiver); when(receiver.setPrefetch(any(Integer.class))).thenReturn(receiver); when(receiver.setQoS(any(ProtonQoS.class))).thenReturn(receiver); when(vertx.eventBus()).thenReturn(eventBus); when(eventBus.<JsonObject> consumer(any(), any())).thenReturn(messageConsumer); sender = mock(ProtonSender.class); }
receiver.closeHandler(res-> { subscription.indicateError(new Exception("Link closed unexpectedly")); receiver.close();
log.info(this + ": receiver opened to " + connection.getRemoteContainer()); }); receiver.closeHandler(result -> { if (result.succeeded()) { log.info(this + ": receiver closed");
receiver.closeHandler(closed -> { if (receiver.getRemoteCondition() != null && LinkError.REDIRECT.equals(receiver.getRemoteCondition().getCondition())) { String relocated = (String) receiver.getRemoteCondition().getInfo().get("address");
@Override public final void onLinkAttach(final ProtonReceiver receiver, final ResourceIdentifier targetAddress) { final String linkId = UUID.randomUUID().toString(); final UpstreamReceiver link = UpstreamReceiver.newUpstreamReceiver(linkId, receiver, getEndpointQos()); downstreamAdapter.onClientAttach(link, s -> { if (s.succeeded()) { receiver.closeHandler(clientDetached -> { // client has closed link -> inform TelemetryAdapter about client detach onLinkDetach(link); downstreamAdapter.onClientDetach(link); }).handler((delivery, message) -> { if (passesFormalVerification(targetAddress, message)) { forwardMessage(link, delivery, message); } else { MessageHelper.rejected(delivery, AmqpError.DECODE_ERROR.toString(), "malformed message"); onLinkDetach(link, condition(AmqpError.DECODE_ERROR.toString(), "invalid message received")); } }).open(); logger.debug("accepted link from telemetry client [{}]", linkId); } else { // we cannot connect to downstream container, reject client link.close(condition(AmqpError.PRECONDITION_FAILED, "no consumer available for target")); } }); }
@Override public void cancel() { LOG.trace("Cancel called"); if(!cancelled.getAndSet(true)) { LOG.trace("Cancellation scheduled"); connCtx.runOnContext(x -> { LOG.trace("Cancelling"); receiver.closeHandler(y -> { indicateCompletion(); receiver.close(); }); receiver.detachHandler(y -> { indicateCompletion(); receiver.detach(); }); if(durable) { receiver.detach(); } else { receiver.close(); } }); } else { LOG.trace("Cancel no-op, already called."); } }
private void receiverHandler(ProtonReceiver receiver) { LOG.info("Attaching link request"); // the LWT service supports only the control address if (!receiver.getRemoteTarget().getAddress().equals(LWT_SERVICE_ENDPOINT)) { ErrorCondition errorCondition = new ErrorCondition(AmqpError.NOT_FOUND, "The provided address isn't supported"); receiver.setCondition(errorCondition) .close(); } else { receiver.setTarget(receiver.getRemoteTarget()) .setQoS(ProtonQoS.AT_LEAST_ONCE) .handler((delivery, message) -> { this.messageHandler(receiver, delivery, message); }) .closeHandler(ar -> { this.closeHandler(receiver, ar); }) .detachHandler(ar -> { this.closeHandler(receiver, ar); }) .setPrefetch(0) .open(); receiver.flow(AMQP_WILL_CREDITS); } }
.closeHandler(ar -> { if (ar.succeeded()) { this.processCloseReceiver(ar.result());
@Override public void onLinkAttach(final ProtonReceiver receiver, final ResourceIdentifier targetAddress) { if (ProtonQoS.AT_MOST_ONCE.equals(receiver.getRemoteQoS())) { logger.debug("client wants to use AT MOST ONCE delivery mode for registration endpoint, this is not supported."); receiver.setCondition(condition(AmqpError.PRECONDITION_FAILED.toString(), "endpoint requires AT_LEAST_ONCE QoS")); receiver.close(); } else { logger.debug("establishing link for receiving registration messages from client [{}]", MessageHelper.getLinkName(receiver)); receiver .setQoS(ProtonQoS.AT_LEAST_ONCE) .setAutoAccept(true) // settle received messages if the handler succeeds .setPrefetch(20) .handler((delivery, message) -> { if (RegistrationMessageFilter.verify(targetAddress, message)) { try { processRequest(message); } catch (DecodeException e) { MessageHelper.rejected(delivery, AmqpError.DECODE_ERROR.toString(), "malformed payload"); } } else { MessageHelper.rejected(delivery, AmqpError.DECODE_ERROR.toString(), "malformed registration message"); // we close the link if the client sends a message that does not comply with the API spec onLinkDetach(receiver, condition(AmqpError.DECODE_ERROR.toString(), "invalid message received")); } }).closeHandler(clientDetached -> onLinkDetach(clientDetached.result())) .open(); } }
serverReceiver.closeHandler(x -> { serverReceiver.close(); asyncClose.complete();
serverReceiver.closeHandler(x -> { serverReceiver.close(); });
serverReceiver.closeHandler(x -> { serverReceiver.close(); });