- Exported log.Event constants for azservicebus. This will maek them easier to discover and they are also documented. The text of log messages themselves are not guaranteed to be stable. (#TBD)
- Fixing issue where the AcceptNextSessionForQueue and AcceptNextSessionForSubscription couldn't be cancelled, forcing the user to wait for the service to timeout. (#17598)
- Support for using a SharedAccessSignature in a connection string. Ex:
Endpoint=sb://<sb>.servicebus.windows.net;SharedAccessSignature=SharedAccessSignature sr=<sb>.servicebus.windows.net&sig=<base64-sig>&se=<expiry>&skn=<keyname>
(#17314)
- Fixed bug where message batch size calculation was inaccurate, resulting in batches that were too large to be sent. (#17318)
- Fixing an issue with an entity not being found leading to a longer timeout than needed. (#17279)
- Fixed the RPCLink so it does better handling of connection/link failures. (#17389)
- Fixed issue where a message lock expiring would cause unnecessary retries. These retries could cause message settlement calls (ex: Receiver.CompleteMessage) to appear to hang. (#17382)
- Fixed issue where a cancellation on ReceiveMessages() would work, but wouldn't return the proper cancellation error. (#17422)
- This module now requires Go 1.18
- Multiple functions have had
options
parameters added. SessionReceiver.RenewMessageLock
has been removed - it isn't used for sessions. SessionReceivers should useSessionReceiver.RenewSessionLock
.- The
admin.Client
type has been changed to conform with the latest Azure Go SDK guidelines. As part of this:-
Embedded
*Result
structs inadmin.Client
's APIs have been removed. Inner *Properties values have been hoisted up to the*Response
instead. -
.Response
fields have been removed for successful results. These will be added back using a different pattern in the next release. -
Fields that were of type
time.Duration
have been changed to*string
, where the value of the string is an ISO8601 timestamp. Affected fields from Queues, Topics and Subscriptions: AutoDeleteOnIdle, DefaultMessageTimeToLive, DuplicateDetectionHistoryTimeWindow, LockDuration. -
Properties that were passed as a parameter to CreateQueue, CreateTopic or CreateSubscription are now in the
options
parameter (as they were optional): Previously:// older code adminClient.CreateQueue(context.Background(), queueName, &queueProperties, nil)
And now:
// new code adminClient.CreateQueue(context.Background(), queueName, &admin.CreateQueueOptions{ Properties: queueProperties, })
-
Pagers have been changed to use the new generics-based
runtime.Pager
:Previously:
// older code for queuePager.NextPage(context.TODO()) { for _, queue := range queuePager.PageResponse().Items { fmt.Printf("Queue name: %s, max size in MB: %d\n", queue.QueueName, *queue.MaxSizeInMegabytes) } } if err := queuePager.Err(); err != nil { panic(err) }
And now:
// new code for queuePager.More() { page, err := queuePager.NextPage(context.TODO()) if err != nil { panic(err) } for _, queue := range page.Queues { fmt.Printf("Queue name: %s, max size in MB: %d\n", queue.QueueName, *queue.MaxSizeInMegabytes) } }
-
- Fix connection recovery in situations where network errors bubble up from go-amqp. (#17048)
- Quicker reattach for idle links. (#17205)
- Quick exit on receiver reconnects to avoid potentially returning duplicate messages. (#17157)
- The following 'Get' APIs have been changed to return a nil result when an item is not found: (#17229)
- GetQueue, GetQueueRuntimeProperties
- GetTopic, GetTopicRuntimeProperties
- GetSubscription, GetSubscriptionRuntimeProperties
- Fix panic() when go-amqp was returning an incorrect error on drain failures. (#17036)
- Allow RetryOptions to be configured in the options for azservicebus.Client as well and admin.Client(#16831)
- Add in the MessageState property to the ReceivedMessage. (#16985)
- Fix unaligned 64-bit atomic operation on mips. Thanks to @jackesdavid for contributing this fix. (#16847)
- Multiple fixes to address connection/link recovery (#16831)
- Fixing panic() when the links haven't been initialized (early cancellation) (#16941)
- Handle 500 as a retryable code (no recovery needed) (#16925)
- Support the pass-through of an Application ID when constructing an Azure Service Bus Client. PR#16558 (thanks halspang!)
- Fixing connection/link recovery in Sender.SendMessages() and Sender.SendMessageBatch(). PR#16790
- Fixing bug in the management link which could cause it to panic during recovery. PR#16790
- Enabling websocket support via
ClientOptions.NewWebSocketConn
. For an example, see theExampleNewClient_usingWebsockets
function inexample_client_test.go
.
- Message properties that come from the standard AMQP message have been made into pointers, to allow them to be properly omitted (or indicate that they've been omitted) when sending and receiving.
- Session IDs can now be blank - prior to this release it would cause an error. PR#16530
- Drain will no longer hang if there is a link failure. Thanks to @flexarts for reporting this issue: PR#16530
- Attempting to settle messages received in ReceiveAndDelete mode would cause a panic. PR#16255
- Removed legacy dependencies, resulting in a much smaller package.
- Updating go-amqp to v0.16.4 to fix a race condition found when running
go test -race
. Thanks to @peterzeller for reporting this issue. PR: #16168
- AbandonMessage and DeferMessage now take an additional
PropertiesToModify
option, allowing the message properties to be modified when they are settled. - Missing fields for entities in the admin.Client have been added (UserMetadata, etc..)
- AdminClient has been moved into the
admin
subpackage. - ReceivedMessage.Body is now a function that returns a ([]byte, error), rather than being a field. This protects against a potential data-loss scenario where a message is received with a payload encoded in the sequence or value sections of an AMQP message, which cannot be prpoerly represented in the .Body. This will now return an error.
- Functions that have options or might have options in the future have an additional *options parameter. As usual, passing 'nil' ignores the options, and will cause the function to use defaults.
- MessageBatch.Add() has been renamed to MessageBatch.AddMessage(). AddMessage() now returns only an
error
, with a sentinel error (ErrMessageTooLarge) signaling that the batch cannot fit a new message. - Sender.SendMessages() has been removed in favor of simplifications made in MessageBatch.
- ReceiveMessages has been tuned to match the .NET limits (which has worked well in practice). This partly addresses #15963, as our default limit was far higher than needed.
- Scheduling messages to be delivered at a later date, via the
Sender.ScheduleMessage(s)
function or settingMessage.ScheduledEnqueueTime
. - Added in the
Sender.SendMessages([slice of sendable messages])
function, which batches messages automatically. Useful when you're sending multiple messages that you are already sure will be small enough to fit into a single batch. - Receiving from sessions using a SessionReceiver, created using Client.AcceptSessionFor(Queue|Subscription) or Client.AcceptNextSessionFor(Queue|Subscription).
- Can fully create, update, delete and list queues, topics and subscriptions using the
AdministrationClient
. - Can renew message and session locks, using Receiver.RenewMessageLock() and SessionReceiver.RenewSessionLock(), respectively.
- Receiver.ReceiveMessages() had a bug where multiple calls could result in the link no longer receiving messages. This was fixed with an update in go-amqp.
- Initial preview for the new version of the Azure Service Bus Go SDK.