UpstreamReceiverImpl(final String linkId, final ProtonReceiver receiver, final ProtonQoS qos) { this.id = Objects.requireNonNull(linkId); this.link = Objects.requireNonNull(receiver); this.link.setAutoAccept(false).setPrefetch(0).setQoS(qos); }
receiver.setPrefetch(0); receiver.openHandler(r -> receiver.flow(1)); receiver.handler((delivery, message) -> {
/** * 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.setPrefetch(0); receiver.flow(sender.getCredit()); receiver.setSource(source);
private void connectionOpened(ProtonConnection conn, String linkName, Source source) { ProtonReceiver receiver = conn.createReceiver(source.getAddress(), new ProtonLinkOptions().setLinkName(linkName)); receiver.setSource(source); receiver.setPrefetch(0); receiver.handler((protonDelivery, message) -> { messages.add(message);
receiver.setPrefetch(0);
receiver.setAutoAccept(true); receiver.setQoS(qos); receiver.setPrefetch(clientConfig.getInitialCredits()); receiver.handler((delivery, message) -> { messageHandler.handle(delivery, message);
receiver.setPrefetch(amqpConfigProperties.getFlowCredit()); } else { receiver.setPrefetch(0) .flow(amqpConfigProperties.getFlowCredit());
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); } }
receiver.setPrefetch(0);
@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(); } }
receiver.setSource(receiver.getRemoteSource()); receiver.setQoS(receiver.getRemoteQoS()); receiver.setPrefetch(30);
serverReceiver.setPrefetch(0);