The way to approach this is to think about what material differences there are in a User message where the user key is 111 or 222, and a User message where this is not the case.
The likely conclusion is that they do, in fact, represent different things in your business process, as one will be consumed with different effect than the other. This is a signal that you actually need to create new message types to differentiate between these differing business cases.
Let's say for example you have the following event message:
public interface IUserAddedInformation
{
Guid UserKey { get; set; }
InformationType informationType { get; set; }
}
public enum InformationType
{
Address,
CreditCard
}
You set up a subscriber to handle the message and process the changes. However, you soon realize that personal data like address and payment data like credit card details are very different, so you want to handle the two instances separately. But how to do this without routing based on the informationType field in the message?
public interface IUserAddedCreditCard
{
Guid UserKey { get; set; }
}
public interface IUserAddedAddress
{
Guid UserKey { get; set; }
}
Now you can create separate handlers for both events. Maybe you would be able to go through a similar process to the above example to work out how to get the routing behavior you need.