Releases: Azure/azure-webjobs-sdk
2.0.0
This 2.0 release has been long overdue :) Following is a list of the changes since the last beta2 release, detailed notes for that and the beta1 release are below as well in their separate beta1, beta2 release note sections. This 2.0 release includes all of those changes, including some breaking changes which we've tried to document here.
- New built in
datetime
system binding, and expanding therand-guid
binding- you can now use expressions like
{datetime}
,{datetime:yyyy-mm-dd}
,{datetime:G}
in your binding expressions, e.g. to timestamp a blob name, etc. - you can now use expressions like
{rand-guid}
,{rand-guid:N}
which outputs a guid w/o hyphens. - the format expression after the ':' can be any valid format expression for the target type (e.g see doc for DateTime format strings here
- you can now use expressions like
- BlobTrigger poison queue changes in multi storage account scenarios (breaking) #804
- previously the
webjobs-blobtrigger-poison
queue was always created in the primary storage account, even if the target account for the BlobTrigger function was a different account. - now the behavior is that the poison queue lives in the same account the the trigger targets
- previously the
- Made Queue VisibilityTimeout configurable via
JobHostQueuesConfiguration.VisibilityTimeout
#844- this allows you to control the retry interval between failed processing attempts
- Made
JobHostQueuesConfiguration.MaxPollingInterval
configurable at theQueueProcessor
level as well.- you can now configure this per queue like many of the other queue control knobs
- EventHub binding performance improvements
- Improvements to ServiceBus BrokeredMessage conversions to byte[] and other types
- Make
IValueProvider.GetValue
async (breaking). This is only an issue for extension authors - Made
TraceFilter.Events
a method that returns a snapshot, rather than it being a live collection as it was before (breaking) - Large refactoring/replat of Queue/Table input/output bindings
- we have a bunch of new extensibility interfaces (currently internal, not released) that we're in the process of finishing up. While these are not yet ready for public consumption, we have replatted some of the bindings to them already in a non-breaking way
- Miscellaneous other bug fixes
v2.0.0-beta2
Main items in this release:
- Table binding
- added new
JObject
/JArray
/IAsyncCollector<JObject>
/ICollector<JObject>
bindings - added the ability to specify table Filter/Take expressions via
TableAttribute
. Used in conjunction with the newJObject
/JArray
bindings to allow query options to be specified declaratively
- added new
- Blob binding
- added support for CloudAppendBlob
- in addition to being able to bind to
CloudBlockBlob
andCloudPageBlob
, you can now bind toCloudAppendBlob
- Additions to
TimeoutAttribute
to allow the host to be brought down when timeout fires- e.g. `[Timeout("00:00:01", ThrowOnTimeout = true)]
- EventHubTrigger
- Allow
EventProcessorOptions
andPartitionManagerOptions
to be specified when creatingEventHubConfiguration
- allow binding to
byte[]
- lots of other improvements to the EventHub bindings
- Allow
- New Twilio binding for sending SMS messages
- send an SMS message easily from your job function!
- details here on usage
- TimerTrigger - lots of fixes and stability improvements. Fixes include:
- Repeated executions Azure/azure-webjobs-sdk-extensions#40
- Fix DailySchedule issue Azure/azure-webjobs-sdk-extensions#132
- Fix for duplicate schedule firings Azure/azure-webjobs-sdk-extensions#106
- Move from file storage to blob storage for schedule monitor Azure/azure-webjobs-sdk-extensions#35
- support
INameResolver
Azure/azure-webjobs-sdk-extensions#33
- ApiHub trigger
- added support for poison queue handling
- max retry count can be specified via
ApiHubConfiguration.MaxFunctionExecutionRetryCount
- when a file exceeds this retry count, a message for that file is written to queue
webjobs-apihubtrigger-poison
- NotificationHub binding
- added
NotificationHubClient
binding - enabled "test send" debugging via
NotificationHubsAttribute.EnableTestSend
- added
- SendGrid binding
- moved to latest SendGrid v3 API (Breaking)
- see samples here for new signatures and usage
- moved to latest versions of our package dependencies (Storage, ServiceBus, etc.)
- bug fixes
v2.0.0-beta1
Main items in this release:
- Move to latest Azure Storage SDK version 7.1.2
- In general, moving to latest versions across all dependencies
- Storage Emulator support. We've removed the checks that previously disabled this.
- Simplified programming model for WebJobs SDK Extension authors (see details here)
- New strategy for BlobTrigger polling that decreases trigger delays
- LOTs of new trigger/binding extensions. Many of these are in the azure-webjobs-sdk-extensions repo. See that repo for more details. The new extensions include:
- EventHubs trigger/binder (see documentation)
- ApiHubFile trigger/binder
- ApiHubTable binder
- DocumentDB binder
- NotificationHubs binder
- MobileApps binder
- Minor breaking changes to the SendGrid binding. To bind to a
SendGridMessage
you must now use anout
parameter, e.g.out SendGridMessage
. Theref
keyword is also not supported anymore. To conditionally send a message, or to send multiple messages, bind toIAsyncCollector<SendGridMessage>
orICollector<SendGridMessage>
. - Expand
IBinder
scenarios by adding a newBinder
type which can also be bound to.Binder
provides additional APIs and functionality overIBinder
- Make
StorageAccountAttribute
/ServiceBusAccountAttribute
more flexible by supporting connection setting names that aren't prefixed with "AzureWebJobs" (which was the previous requirement) - Support for
rand-guid
binding parameter. E.g. you can now use the binding parameter in binding expressions like[Blob("output/{rand-guid}")]
. The parameter will be automatically resolved to a new guid value. - Allow
JobHost.Call
argument dictionary to include binding data, in addition to parameter values - TimerTrigger Updates
- Moved schedule tracking from file storage to blob storage to deal with slot swap issues
- Adding
INameResolver
support to TimerTrigger. E.g.[TimerTrigger("%MySchedule%")]
, where %MySchedule% will be auto resolved if there is a corresponding app setting by that name containing the schedule value.
- Lots of bug fixes
v1.1.2
This release was a hotfix release. The only change in this release was to remove the Azure Storage SDK version cap we had in place. See this issue for more details on that.
v1.1.1
- Added support for cross function singleton locking via
SingletonScope.Host
. See the Singleton wiki page for more information. - Added a
JobHostConfiguration.IsDevelopment
flag and a correspondingJobHostConfiguration.UseDevelopmentSettings()
method to facilitate local development. See the Running Locally wiki page for details. - Added TraceLevelAttribute to allow job functions to declare the level of Console/Dashboard logging to perform for that function. By setting the level to
TraceLevel.Off
a function can opt out of Dashboard logging (since this logging introduces a bit of overhead) to increase throughput. If the TraceLevel is set toTraceLevel.Error
for a function, successful invocations will not produce logs, but if a function errors it will produce logs (both Console and Dashboard). - For ServiceBus, added a new virtual method MessagingProvider.CreateMessageReceiver to allow users to further customize MessageReceivers as needed. For example, you can now configure advanced options like PrefetchCount, etc.
- Added ServiceBusConfiguration.PrefetchCount as a top level configuration setting.
- Added byte[] bindings for BlobAttribute and BlobTriggerAttribute. You can now bind blobs to a byte[] for both input and output.
- Making our Azure Storage SDK package version requirement explicit to prevent accidental upgrade issues (since the SDK currently only works with version 5.0.2 and below. The package dependency is now set to [4.3.0, 5.0.2].
- Fixed several customer reported bugs
v1.1.0
See below prerelease versions for all the features in 1.1.0. Check out the WebJobs SDK Extensions repo for new triggers such as Files, Timers, SendGrid, WebHooks and more.
v1.1.0-rc1
- Added TimeoutAttribute allowing functions to declaratively request function cancellation when a timeout expires. This builds on our existing
CancellationToken
binding support.- The attribute can be applied at the class/method level. A global timeout can also be specified via
JobHostConfiguration.FunctionTimeout
. - To receive the timeout cancellation, a function must include a
CancellationToken
parameter - The function should pass the token along to any sub Tasks that are initiated. If the function is not async, it can poll the token for cancellation (
CancellationToken.IsCancellationRequested
), or use the other CancellationToken monitoring methods. - sample here
- The attribute can be applied at the class/method level. A global timeout can also be specified via
- Added DisableAttribute allowing for contitional enable/disable of triggered functions (see sample here).
- e.g. you can dynamically enable/disable functions based on application settings
- Added a CloudBlobDirectory binding for blobs
- Updates to Singleton
- allow specification of storage account (via SingletonAttribute.Account) supporting global level locks
- added SingletonMode allowing for Listener level singletons
- Change JobHost to start all triggered function listeners in parallel
- WebHook Trigger Updates
- allow WebHook functions to return custom responses (via WebHookContext binding)
- added ASP.NET WebHooks SDK integration
- ErrorTrigger
- allow job functions to be triggered based on error rates (e.g. sliding window, custom, etc.)
- integrate with 3rd party services to send Email/SMS alerts
- see Error Alerting for more information
- TimerTrigger Updates
- added TimerTriggerAttribute.RunOnStartup to allow a function to be run immediately on startup (then on schedule thereafter)
- Lots of bug fixes
v1.1.0-beta1
- IEnumerable binding for Blobs
- You can now bind to a collection of blobs (e.g. IEnumerable, IEnumerable, CloudBlobContainer, etc.)
- See the tests here for some examples.
- Multiple Storage Account support
- Dashboard Multiple Storage Account support
- The Dashboard can now correctly display Blob links to blobs in different storage accounts.
- Addresses issue #294.
- ServiceBus Multiple Storage Account support
- Similar to the StorageAccountAttribute discussed above, there is a ServiceBusAccountAttribute that allows you to specify the ServiceBus account to use in the same way.
- See sample here
- Added JobHostConfiguration.StorageClientFactory
- Allows you to control/customize the Azure Storage SDK clients used by the WebJobs SDK. You can use this to specify/set advanced options on CloudQueueClient/CloudBlobClient/CloudTableClient, etc.
- Addresses issue #497.
- WebHook Trigger
- A new trigger extension for triggering functions based on WebHook HTTP requests.
- See the WebHooks Walkthrough for more information.
- SendGrid Binder
- A new binder extension allowing your functions to easily send emails using SendGrid.
- See the azure-webjobs-sdk-extensions ReadMe for more information.
- Updates to all Nuget dependencies used by the SDK (moved to latest versions of all dependencies within the current major version).
v1.1.0-alpha2
See Azure Blog post for more details on this release.
- Singleton
- New SingletonAttribute for job functions that allows you to declaratively specify that only a single instance of the function should be run at any given time (even across scaled out instances).
- Behind the scenes, this distributed locking is achieved by using Blob leases.
- Singleton locking can be based on a custom scopes, which can come from path binding (i.e. from trigger data)
- Support for Singleton Listeners (i.e. a trigger binding can declare its listener Singleton). An example of this is TimerTrigger. For a timer, you don't want it running the same schedule on multiple scaled out instances.
- Sample here
- Logging/Tracing Extensibility
- Allow custom TraceWriters to be plugged into the host via JobHostConfiguration.Tracing
- Allow the Console output TraceLevel to be customized via
JobHostConfiguration.Tracing.ConsoleLevel
. This is very useful (and recommended) for local debugging. - Added a new TraceWriter binding (similar to TextWriter) that allows functions to bind to the TraceWriter
- Sample here
- ServiceBus Messaging improvements
- Allow deep customization of Message processing via ServiceBusConfiguration.MessagingProvider
- MessagingProvider supports customization of the ServiceBus MessagingFactory and NamespaceManager
- A new MessageProcessor strategy pattern allows you to specify a processor per queue/topic
- Support message processing concurrency by default (previously there was no concurrency)
- Easy customization of OnMessageOptions via ServiceBusConfiguration.MessageOptions
- Sample here
- Lowered the JobHostQueuesConfiguration.MaxPollingInterval to 100ms (from 2 seconds)
- Fixed bugs in Blob container scan logic
- Misc. bug fixes
v1.1.0-alpha1
See Azure blog post for more details.
- Open Sourced the WebJobs SDK
- Extensibility Model for Triggers / Binders
- Allows custom triggers/binders to be authored by 3rd parties (for examples see the azure-webjobs-sdk-extensions repo)
- New TimerTrigger binding for scheduled jobs
- New FileTrigger binding for triggering based on file system events (includes File binding)
- Support for custom Table binding extensions
- Queue Processing improvements
- Allow custom QueueProcessors to be defined per queue to customize message processing
- Added JobHostQueuesConfiguration.NewBatchThreshold to allow for more control over concurrency
- Sample here
- Allow AccessRights to be specified on ServiceBusTriggerAttribute/ServiceBusAttribute (for scenarios where you might not have Manage rights). Sample here
- Misc. bug fixes