private void lazyCreateMessageAnnotations() { if (messageAnnotationsMap == null) { messageAnnotationsMap = new HashMap<>(); message.setMessageAnnotations(new MessageAnnotations(messageAnnotationsMap)); } }
/** * Adds a value for a symbol to an AMQP 1.0 message's <em>annotations</em>. * * @param msg the message to add the symbol to. * @param key the name of the symbol to add a value for. * @param value the value to add. */ public static void addAnnotation(final Message msg, final String key, final Object value) { MessageAnnotations annotations = msg.getMessageAnnotations(); if (annotations == null) { annotations = new MessageAnnotations(new HashMap<>()); msg.setMessageAnnotations(annotations); } annotations.getValue().put(Symbol.getSymbol(key), value); }
Message toAmqpMessage(final String partitionKey) { final Message amqpMessage = this.toAmqpMessage(); final MessageAnnotations messageAnnotations = (amqpMessage.getMessageAnnotations() == null) ? new MessageAnnotations(new HashMap<>()) : amqpMessage.getMessageAnnotations(); messageAnnotations.getValue().put(AmqpConstants.PARTITION_KEY, partitionKey); amqpMessage.setMessageAnnotations(messageAnnotations); return amqpMessage; }
/** * Adds a value for a symbol to an AMQP 1.0 message's <em>annotations</em>. * * @param msg the message to add the symbol to. * @param key the name of the symbol to add a value for. * @param value the value to add. */ public static void addAnnotation(final Message msg, final String key, final Object value) { MessageAnnotations annotations = msg.getMessageAnnotations(); if (annotations == null) { annotations = new MessageAnnotations(new HashMap<>()); msg.setMessageAnnotations(annotations); } annotations.getValue().put(Symbol.getSymbol(key), value); }
@Override public Message toMessage(String address, KafkaConsumerRecord<String, byte[]> record) { Message message = Proton.message(); message.setAddress(address); message.decode(record.value(), 0, record.value().length); // put message annotations about partition, offset and key (if not null) Map<Symbol, Object> map = new HashMap<>(); map.put(Symbol.valueOf(AmqpBridge.AMQP_PARTITION_ANNOTATION), record.partition()); map.put(Symbol.valueOf(AmqpBridge.AMQP_OFFSET_ANNOTATION), record.offset()); map.put(Symbol.valueOf(AmqpBridge.AMQP_KEY_ANNOTATION), record.key()); map.put(Symbol.valueOf(AmqpBridge.AMQP_TOPIC_ANNOTATION), record.topic()); MessageAnnotations messageAnnotations = new MessageAnnotations(map); message.setMessageAnnotations(messageAnnotations); return message; }
private void forwardMessage(ProtonSender protonSender, ProtonReceiver protonReceiver, ProtonDelivery sourceDelivery, Message message) { MessageAnnotations annotations = message.getMessageAnnotations(); if (annotations == null) { annotations = new MessageAnnotations(Collections.singletonMap(replicated, true)); } else { annotations.getValue().put(replicated, true); } message.setMessageAnnotations(annotations); protonSender.send(message, protonDelivery -> { sourceDelivery.disposition(protonDelivery.getRemoteState(), protonDelivery.remotelySettled()); protonReceiver.flow(protonSender.getCredit() - protonReceiver.getCredit()); }); }
message.setMessageAnnotations(messageAnnotations);
@Override public Message toMessage(String address, KafkaConsumerRecord<String, byte[]> record) { Message message = Proton.message(); message.setAddress(address); // put message annotations about partition, offset and key (if not null) Map<Symbol, Object> map = new HashMap<>(); map.put(Symbol.valueOf(AmqpBridge.AMQP_PARTITION_ANNOTATION), record.partition()); map.put(Symbol.valueOf(AmqpBridge.AMQP_OFFSET_ANNOTATION), record.offset()); map.put(Symbol.valueOf(AmqpBridge.AMQP_KEY_ANNOTATION), record.key()); map.put(Symbol.valueOf(AmqpBridge.AMQP_TOPIC_ANNOTATION), record.topic()); MessageAnnotations messageAnnotations = new MessageAnnotations(map); message.setMessageAnnotations(messageAnnotations); message.setBody(new Data(new Binary(record.value()))); return message; }
final Map<Symbol, Object> annotations = new HashMap<>(); annotations.put(Symbol.valueOf(MessageHelper.ANNOTATION_X_OPT_APP_CORRELATION_ID), true); message.setMessageAnnotations(new MessageAnnotations(annotations));
final Map<Symbol, Object> annotations = new HashMap<>(); annotations.put(Symbol.valueOf(MessageHelper.ANNOTATION_X_OPT_APP_CORRELATION_ID), true); message.setMessageAnnotations(new MessageAnnotations(annotations));
: amqpMessage.getMessageAnnotations(); messageAnnotations.getValue().put(Symbol.getSymbol(systemProperty.getKey()), systemProperty.getValue()); amqpMessage.setMessageAnnotations(messageAnnotations);
batchMessage.setMessageAnnotations(firstMessage.getMessageAnnotations());
batchMessage.setMessageAnnotations(firstMessage.getMessageAnnotations());
/** * Return a raw AMQP message * * @return */ public Message toAmqp() { Message message = ProtonHelper.message(); message.setSubject(AMQP_SUBJECT); Map<Symbol, Object> map = new HashMap<>(); map.put(Symbol.valueOf(AMQP_RETAIN_ANNOTATION), this.isRetain); map.put(Symbol.valueOf(AMQP_QOS_ANNOTATION), this.qos.value()); MessageAnnotations messageAnnotations = new MessageAnnotations(map); message.setMessageAnnotations(messageAnnotations); message.setAddress(this.topic); Header header = new Header(); header.setDurable(this.qos != MqttQoS.AT_MOST_ONCE); message.setHeader(header); // the payload could be null (or empty) if (this.payload != null) message.setBody(new Data(new Binary(this.payload.getBytes()))); return message; }
/** * Return a raw AMQP message * * @return */ public Message toAmqp() { Message message = ProtonHelper.message(); message.setSubject(AMQP_SUBJECT); Map<Symbol, Object> map = new HashMap<>(); map.put(Symbol.valueOf(AMQP_RETAIN_ANNOTATION), this.isRetain); map.put(Symbol.valueOf(AMQP_QOS_ANNOTATION), this.qos.value()); MessageAnnotations messageAnnotations = new MessageAnnotations(map); message.setMessageAnnotations(messageAnnotations); message.setAddress(this.topic); Header header = new Header(); header.setDurable(this.qos != MqttQoS.AT_MOST_ONCE); message.setHeader(header); // the payload could be null (or empty) if (this.payload != null) message.setBody(new Data(new Binary(this.payload.getBytes()))); return message; }
/** * Return a raw AMQP message * * @return */ public Message toAmqp() { Message message = ProtonHelper.message(); Map<Symbol, Object> map = new HashMap<>(); map.put(Symbol.valueOf(AMQP_RETAIN_ANNOTATION), this.isRetain); map.put(Symbol.valueOf(AMQP_QOS_ANNOTATION), this.qos.value()); MessageAnnotations messageAnnotations = new MessageAnnotations(map); message.setMessageAnnotations(messageAnnotations); message.setAddress(this.topic); Header header = new Header(); header.setDurable(this.qos != MqttQoS.AT_MOST_ONCE); message.setHeader(header); message.setDeliveryCount(this.isDup ? 1 : 0); // the payload could be null (or empty) if (this.payload != null) message.setBody(new Data(new Binary(this.payload.getBytes()))); return message; }
/** * Return a raw AMQP message * * @return */ public Message toAmqp() { Message message = ProtonHelper.message(); message.setMessageId(this.messageId); Map<Symbol, Object> map = new HashMap<>(); map.put(Symbol.valueOf(AMQP_RETAIN_ANNOTATION), this.isRetain); map.put(Symbol.valueOf(AMQP_QOS_ANNOTATION), this.qos.value()); MessageAnnotations messageAnnotations = new MessageAnnotations(map); message.setMessageAnnotations(messageAnnotations); message.setAddress(this.topic); Header header = new Header(); header.setDurable(this.qos != MqttQoS.AT_MOST_ONCE); message.setHeader(header); message.setDeliveryCount(this.isDup ? 1 : 0); // the payload could be null (or empty) if (this.payload != null) message.setBody(new Data(new Binary(this.payload.getBytes()))); return message; }
protonMsg.setMessageAnnotations(ma);
amqpMessage.setMessageAnnotations(new MessageAnnotations(messageAnnotationsMap));
@Test public void testAMQP_to_JSON_VerifyMessageAnnotations() { Map<Symbol, Object> annotations = new HashMap<>(); MessageAnnotations ma = new MessageAnnotations(annotations); String testAnnKeyNameA = "testAnnKeyA"; String testAnnKeyNameB = "testAnnKeyB"; Symbol testAnnKeyA = Symbol.valueOf(testAnnKeyNameA); String testAnnValueA = "testAnnValueA"; Symbol testAnnKeyB = Symbol.valueOf(testAnnKeyNameB); String testAnnValueB = "testAnnValueB"; annotations.put(testAnnKeyA, testAnnValueA); annotations.put(testAnnKeyB, testAnnValueB); Message protonMsg = Proton.message(); protonMsg.setMessageAnnotations(ma); JsonObject jsonObject = translator.convertToJsonObject(protonMsg); assertNotNull("expected converted msg", jsonObject); assertTrue("expected message annotations element key to be present", jsonObject.containsKey(AmqpConstants.MESSAGE_ANNOTATIONS)); JsonObject jsonMsgAnn = jsonObject.getJsonObject(AmqpConstants.MESSAGE_ANNOTATIONS); assertNotNull("expected message annotations element value to be non-null", jsonMsgAnn); assertTrue("expected key to be present", jsonMsgAnn.containsKey(testAnnKeyNameA)); assertEquals("expected value to be equal", testAnnValueA, jsonMsgAnn.getValue(testAnnKeyNameA)); assertTrue("expected key to be present", jsonMsgAnn.containsKey(testAnnKeyNameB)); assertEquals("expected value to be equal", testAnnValueB, jsonMsgAnn.getValue(testAnnKeyNameB)); }