-
Notifications
You must be signed in to change notification settings - Fork 2.2k
SB Track2: Expose AMQP details ServiceBus Messages for sending and receiving. #14848
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
hemanttanwar
merged 29 commits into
Azure:master
from
hemanttanwar:sb-track2-expose-amqp-message-details-14385
Sep 10, 2020
Merged
Changes from 11 commits
Commits
Show all changes
29 commits
Select commit
Hold shift + click to select a range
002335f
Continue Implementation
672b166
Continue implementation
10f0647
Continue implementation
5cd4b18
Continue implementation
7dee518
Continue implementation
eea67f1
Merge branch 'master' into sb-track2-expose-amqp-message-details-14385
0e3956c
Continue initial draft implementation: moved sbrm to models
735f657
Draft implementation
a4100f0
Draft implementation
6614ebd
Removed commented code
00f7a82
Added more implementation
ec6758b
Incorporated Review comments
587d2e9
Incorporated Review comments
8fbbf9f
fixing some test
0863421
Fixing text
72c3818
Fix test and checkstyle
836e6b3
Incorporated review comments.
2d680f1
Added unit test case.
b4baee7
Added unit test case and general cleanup
b475d65
Added unit test case and general cleanup
6cf5072
Added change log.
947d146
Adding more unit test
814cd01
Adding more unit test
5f7fa17
Merge branch 'master' into sb-track2-expose-amqp-message-details-14385
72c4476
Added more comment
e019fc5
Added more check in unit test
5243462
Adding more test
3fe4224
Review comments
ea1ee38
Adding java doc
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
123 changes: 123 additions & 0 deletions
123
sdk/core/azure-core-amqp/src/main/java/com/azure/core/amqp/models/AmqpAnnotatedMessage.java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,123 @@ | ||
| // Copyright (c) Microsoft Corporation. All rights reserved. | ||
| // Licensed under the MIT License. | ||
|
|
||
| package com.azure.core.amqp.models; | ||
|
|
||
| import java.util.HashMap; | ||
| import java.util.Map; | ||
| import java.util.Objects; | ||
|
|
||
| /** | ||
| * The representation of message as defined by AMQP protocol. | ||
| * | ||
| * @see <a href="http://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-messaging-v1.0-os.html#section-message-format"> | ||
| * Amqp Message Format.</a> | ||
| */ | ||
| public final class AmqpAnnotatedMessage { | ||
| private final AmqpMessageBody amqpMessageBody; | ||
| private final Map<String, Object> applicationProperties; | ||
| private final Map<String, Object> deliveryAnnotations; | ||
| private final Map<String, Object> messageAnnotations; | ||
| private final Map<String, Object> footer; | ||
| private final AmqpMessageHeader header; | ||
| private final AmqpMessageProperties properties; | ||
|
|
||
| /** | ||
| * Creates instance of {@link AmqpAnnotatedMessage} with given {@link AmqpMessageBody}. | ||
| * | ||
| * @param body to be set on amqp message. | ||
| * | ||
| * @throws NullPointerException if {@code body} is null. | ||
| */ | ||
| public AmqpAnnotatedMessage(AmqpMessageBody body) { | ||
| amqpMessageBody = Objects.requireNonNull(body, "'body' cannot be null."); | ||
|
|
||
| applicationProperties = new HashMap<>(); | ||
| deliveryAnnotations = new HashMap<>(); | ||
| messageAnnotations = new HashMap<>(); | ||
| footer = new HashMap<>(); | ||
| header = new AmqpMessageHeader(); | ||
| properties = new AmqpMessageProperties(); | ||
| } | ||
|
|
||
| /** | ||
| * Creates instance of {@link AmqpAnnotatedMessage} with given {@link AmqpAnnotatedMessage} instance. | ||
| * | ||
| * @param message used to create another instance of {@link AmqpAnnotatedMessage}. | ||
| * | ||
| * @throws NullPointerException if {@code message} or {@link AmqpAnnotatedMessage#getBody() body} is null. | ||
| */ | ||
| public AmqpAnnotatedMessage(AmqpAnnotatedMessage message) { | ||
| Objects.requireNonNull(message, "'message' cannot be null."); | ||
| amqpMessageBody = Objects.requireNonNull(message.getBody(), "'message.body' cannot be null."); | ||
|
|
||
| applicationProperties = message.getApplicationProperties(); | ||
| deliveryAnnotations = message.getDeliveryAnnotations(); | ||
| messageAnnotations = message.getMessageAnnotations(); | ||
| header = message.getHeader(); | ||
| properties = message.getProperties(); | ||
| footer = message.getFooter(); | ||
| } | ||
|
|
||
| /** | ||
| * Gets the {@link Map} of application properties. | ||
| * @return The application properties. | ||
| */ | ||
| public Map<String, Object> getApplicationProperties() { | ||
| return applicationProperties; | ||
| } | ||
|
|
||
| /** | ||
| * Gets the {@link AmqpMessageBody} of an amqp message. | ||
| * | ||
| * @return the {@link AmqpMessageBody} object. | ||
| */ | ||
| public AmqpMessageBody getBody() { | ||
| return amqpMessageBody; | ||
| } | ||
|
|
||
| /** | ||
| * Gets the {@link Map} representation of delivery annotations defined on an amqp message. | ||
| * | ||
| * @return the {@link Map} representation of delivery annotations. | ||
| */ | ||
| public Map<String, Object> getDeliveryAnnotations() { | ||
| return deliveryAnnotations; | ||
| } | ||
|
|
||
| /** | ||
| * Gets the {@link Map} representation of footer defined on an amqp message. | ||
| * | ||
| * @return the {@link Map} representation of footer. | ||
| */ | ||
| public Map<String, Object> getFooter() { | ||
| return footer; | ||
| } | ||
|
|
||
| /** | ||
| * Gets the {@link AmqpMessageHeader} defined on an amqp message. | ||
| * | ||
| * @return the {@link AmqpMessageHeader} object. | ||
| */ | ||
| public AmqpMessageHeader getHeader() { | ||
| return header; | ||
| } | ||
|
|
||
| /** | ||
| * Gets the {@link Map} representation of message annotations defined on an amqp message. | ||
| * | ||
| * @return the {@link Map} representation of message annotations. | ||
| */ | ||
| public Map<String, Object> getMessageAnnotations() { | ||
| return messageAnnotations; | ||
| } | ||
|
|
||
| /** | ||
| * Gets the {@link AmqpMessageProperties} defined on an amqp message. | ||
| * | ||
| * @return the {@link AmqpMessageProperties} object. | ||
| */ | ||
| public AmqpMessageProperties getProperties() { | ||
| return properties; | ||
| } | ||
| } |
23 changes: 23 additions & 0 deletions
23
sdk/core/azure-core-amqp/src/main/java/com/azure/core/amqp/models/AmqpBodyType.java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,23 @@ | ||
| // Copyright (c) Microsoft Corporation. All rights reserved. | ||
| // Licensed under the MIT License. | ||
|
|
||
| package com.azure.core.amqp.models; | ||
|
|
||
| /** | ||
| * All AmqpBodyType available for AMQP Message. | ||
| */ | ||
| public enum AmqpBodyType { | ||
| /** | ||
| * Represent Amqp Data type | ||
| */ | ||
| DATA, | ||
| /** | ||
| * Represent Amqp Value type | ||
| */ | ||
| VALUE, | ||
| /** | ||
| * Represent Amqp Sequence type | ||
| */ | ||
| SEQUENCE; | ||
|
|
||
| } |
40 changes: 40 additions & 0 deletions
40
sdk/core/azure-core-amqp/src/main/java/com/azure/core/amqp/models/AmqpDataBody.java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,40 @@ | ||
| // Copyright (c) Microsoft Corporation. All rights reserved. | ||
| // Licensed under the MIT License. | ||
|
|
||
| package com.azure.core.amqp.models; | ||
|
|
||
| import com.azure.core.util.IterableStream; | ||
|
|
||
| import java.util.Objects; | ||
|
|
||
| /** | ||
| * This is amqp message body which represents {@link AmqpBodyType#DATA} type. | ||
| */ | ||
| public final class AmqpDataBody implements AmqpMessageBody { | ||
| private final IterableStream<BinaryData> data; | ||
|
|
||
| /** | ||
| * Creates instance of {@link AmqpDataBody} with given {@link Iterable} of {@link BinaryData}. | ||
| * | ||
| * @param data to be set on amqp body. | ||
| * | ||
| * @throws NullPointerException if {@code data} is null. | ||
| */ | ||
| public AmqpDataBody(Iterable<BinaryData> data) { | ||
| Objects.requireNonNull(data, "'data' cannot be null."); | ||
| this.data = new IterableStream<>(data); | ||
| } | ||
|
|
||
| @Override | ||
| public AmqpBodyType getBodyType() { | ||
| return AmqpBodyType.DATA; | ||
| } | ||
|
|
||
| /** | ||
| * Gets {@link BinaryData} set on this {@link AmqpDataBody}. | ||
| * @return data set on {@link AmqpDataBody}. | ||
| */ | ||
| public IterableStream<BinaryData> getData() { | ||
| return data; | ||
| } | ||
| } | ||
16 changes: 16 additions & 0 deletions
16
sdk/core/azure-core-amqp/src/main/java/com/azure/core/amqp/models/AmqpMessageBody.java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,16 @@ | ||
| // Copyright (c) Microsoft Corporation. All rights reserved. | ||
| // Licensed under the MIT License. | ||
|
|
||
| package com.azure.core.amqp.models; | ||
|
|
||
| /** | ||
| * Interface representing Amqp Message Body. | ||
| */ | ||
| public interface AmqpMessageBody { | ||
| /** | ||
| * Type representing various supported amqp body types. | ||
| * | ||
| * @return The {@link AmqpBodyType}. | ||
| */ | ||
| AmqpBodyType getBodyType(); | ||
| } |
132 changes: 132 additions & 0 deletions
132
sdk/core/azure-core-amqp/src/main/java/com/azure/core/amqp/models/AmqpMessageHeader.java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,132 @@ | ||
| // Copyright (c) Microsoft Corporation. All rights reserved. | ||
| // Licensed under the MIT License. | ||
|
|
||
| package com.azure.core.amqp.models; | ||
|
|
||
| import com.azure.core.annotation.Fluent; | ||
|
|
||
| import java.time.Duration; | ||
|
|
||
| /** | ||
| * The representation of message header as defined by AMQP protocol. | ||
| * | ||
| * @see <a href="http://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-messaging-v1.0-os.html#section-message-format"> | ||
| * Amqp Message Format.</a> | ||
| */ | ||
| @Fluent | ||
| public class AmqpMessageHeader { | ||
|
|
||
| private Long deliveryCount; | ||
| private Boolean durable; | ||
| private Boolean firstAcquirer; | ||
| private Short priority; | ||
| private Duration timeToLive; | ||
|
|
||
| AmqpMessageHeader() { | ||
| // This class does not have any public constructors, and is not able to be instantiated using 'new'. | ||
| } | ||
|
|
||
| /** | ||
| * Gets the delivery count from amqp message header. | ||
| * | ||
| * @return the delivery count value. | ||
| */ | ||
| public Long getDeliveryCount() { | ||
| return deliveryCount; | ||
| } | ||
|
|
||
| /** | ||
| * Sets the given {@code deliveryCount} value on {@link AmqpMessageHeader} object. | ||
| * | ||
| * @param deliveryCount to be set. | ||
| * @return updated {@link AmqpMessageHeader} object. | ||
| */ | ||
| public AmqpMessageHeader setDeliveryCount(Long deliveryCount) { | ||
| this.deliveryCount = deliveryCount; | ||
| return this; | ||
| } | ||
|
|
||
| /** | ||
| * Gets durable boolean flag from amqp message header. | ||
| * | ||
| * @return the durable flag. | ||
| */ | ||
| public Boolean isDurable() { | ||
| return durable; | ||
| } | ||
|
|
||
| /** | ||
| * Sets the given {@code durable} value on {@link AmqpMessageHeader} object. | ||
| * | ||
| * @param durable to set on {@link AmqpMessageHeader}. | ||
| * | ||
| * @return updated {@link AmqpMessageHeader} object. | ||
| */ | ||
| public AmqpMessageHeader setDurable(Boolean durable) { | ||
| this.durable = durable; | ||
| return this; | ||
| } | ||
|
|
||
| /** | ||
| * Gets boolean flag for {@code firstAcquirer} from amqp message header. | ||
| * | ||
| * @return the {@code firstAcquirer} value. | ||
| */ | ||
| public Boolean isFirstAcquirer() { | ||
| return this.firstAcquirer; | ||
| } | ||
|
|
||
| /** | ||
| * Sets the given {@code firstAcquirer} value on {@link AmqpMessageHeader} object. | ||
| * | ||
| * @param firstAcquirer to set on {@link AmqpMessageHeader}. | ||
| * | ||
| * @return updated {@link AmqpMessageHeader} object. | ||
| */ | ||
| public AmqpMessageHeader setFirstAcquirer(Boolean firstAcquirer) { | ||
| this.firstAcquirer = firstAcquirer; | ||
| return this; | ||
| } | ||
|
|
||
| /** | ||
| * Gets the priority on {@code amqpMessage} from amqp message header. | ||
| * | ||
| * @return the {@code priority} value. | ||
| */ | ||
| public Short getPriority() { | ||
| return priority; | ||
| } | ||
|
|
||
| /** | ||
| * Sets the given {@code priority} value on {@link AmqpMessageHeader} object. | ||
| * | ||
| * @param priority to set on {@link AmqpMessageHeader}. | ||
| * | ||
| * @return updated {@link AmqpMessageHeader} object. | ||
| */ | ||
| public AmqpMessageHeader setPriority(short priority) { | ||
hemanttanwar marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
| this.priority = priority; | ||
| return this; | ||
| } | ||
|
|
||
| /** | ||
| * Gets {@code timeToLive} from amqp message header. | ||
| * | ||
| * @return the {@code timeToLive} value. | ||
| */ | ||
| public Duration getTimeToLive() { | ||
| return timeToLive; | ||
| } | ||
|
|
||
| /** | ||
| * Sets the given {@code timeToLive} value on {@link AmqpMessageHeader} object. | ||
| * | ||
| * @param timeToLive to set on {@link AmqpMessageHeader}. | ||
| * | ||
| * @return updated {@link AmqpMessageHeader} object. | ||
| */ | ||
| public AmqpMessageHeader setTimeToLive(Duration timeToLive) { | ||
| this.timeToLive = timeToLive; | ||
| return this; | ||
| } | ||
| } | ||
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.