您处理对 ActiveMQ 队列和主题的授权的方式是通过前缀和用户级别的授权插件。
<authorizationPlugin>
<map>
<authorizationMap>
<authorizationEntries>
<authorizationEntry queue="client.client123.>" read="client123" write="client123" admin="admins" />
<authorizationEntry topic="client.client123.>" read="client123" write="client123" admin="admins"/>
... etc. for other clients.
</authorizationEntries>
这假设 client123 已通过任何身份验证机制进行身份验证进行身份验证。
我不遵循您希望 Camel 如何处理路由,但这样的事情可能是您想要从多个客户端队列路由到带有标头的单个队列(只是一个示例,您可能必须修改它以适应你的情况有点,错误处理等等。
注意>
通配符队列的使用。
from("jms:queue:client.>")
.process(new Processor(){
@Override
public void process(Exchange exchange) throws Exception {
String queue = exchange.getIn().getHeader("JMSDestination").toString();
// queue name is: queue://client.<client_id>.xx
String clientId = queue.substring(queue.indexOf(".")+1);
int idx = clientId.lastIndexOf(".");
clientId = clientId.substring(0,idx);
System.out.println("ClientID: " + clientId);
exchange.getIn().setHeader("SendingClientId", clientId);
}
})
.to("jms:queue:collector.queue");