Since adding an extra parameter seems to be so hard for the Hangfire team ;-)....
...I've found the most convenient way is to make two methods that just call the actual implementation, and put different [Queue]
attributes on each.
Usually if I need to switch queues it's between dev / production and I want to just call something like RunOrder(...)
with isTestOrder=boolean
and not be concerned about queues at that level.
public void RunOrder(int orderId, bool isTestOrder) { if (isTestOrder) { BackgroundJob.Enqueue(() => _RunTestOrder(orderId)); } else { BackgroundJob.Enqueue(() => _RunOrder(orderId)); }}[Queue("dev")]public void _RunTestOrder(int orderId) { OrderProcessor.RunOrder(orderId); // actual code to call processor}[Queue("production")]`public void _RunProductionOrder(int orderId) { OrderProcessor.RunOrder(orderId); // is the same in both 'hangfire proxies'}
Note usage of _
to indicate these aren't meant to be called directly. I don't remember off hand if hangfire methods need to be public or not - but if they do need to be then the _
is more important.