【发布时间】:2019-08-15 20:51:59
【问题描述】:
ActiveMQ 中是否有一个功能,也许是 Camel,可以执行以下操作?
- 在代理处拦截传入消息
- 根据任意规则验证标头和/或正文
- 如果消息未经验证,则向发件人抛出异常,或者..
- 将无效消息重新路由到“拒绝”队列
【问题讨论】:
标签: java jms apache-camel activemq
ActiveMQ 中是否有一个功能,也许是 Camel,可以执行以下操作?
【问题讨论】:
标签: java jms apache-camel activemq
您可以使用 ActiveMQ 代理 Camel 组件来拦截代理内的消息并使用 Camel 路由进行路由
【讨论】:
阅读您的描述,我想您正在尝试将传入消息排队。
有一个新的内部类,它实现了 MessageListener。编写一个接受一些参数并进行一些验证的方法。
在onMessage方法中,您可以调用该方法传递适当的参数,如果条件满足,则将消息排队,
在父方法中- 创建此类的一个实例并将其设置为 setMessageListener。
【讨论】:
以下是如何制作传入消息拦截器:
1.在您的 ConnectionFactory 中:
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url, username, password);
connectionFactory.getServerLocator().setIncomingInterceptorList("com.itsgosho.emails.EmailIncomingInterceptor");
2.在这个拦截器中:
@Component
public class EmailIncomingInterceptor implements org.apache.activemq.artemis.api.core.Interceptor {
@Override
public boolean intercept(Packet packet, RemotingConnection connection) throws ActiveMQException {
if(isMessageReceive(packet)){
Message message = ((SessionReceiveMessage) packet).getMessage();
return false;
}
return true;
}
private boolean isMessageReceive(Packet packet){
if (packet instanceof SessionReceiveMessage) {
SessionReceiveMessage realPacket = (SessionReceiveMessage) packet;
Message msg = realPacket.getMessage();
if ((msg.getTimestamp() > 0) && msg.getUserID() != null){
return true;
}
}
return false;
}
}
【讨论】: