根据规则拦截传入的 JMS 消息到 ActiveMQ,reject/approve
Intercept incoming JMS messages to ActiveMQ, reject/approve based on rules
ActiveMQ 中是否有一项功能(可能与 Camel 一起使用)来执行以下操作?
- 在 broker
拦截传入消息
- 根据任意规则验证headersand/orbody
- 如果消息未经验证,则向发件人抛出异常,或者..
- 将无效邮件重新路由到 'rejection' queue
阅读您的描述,我推测您正在尝试对传入消息进行排队。
有一个新的内部 class,它实现了 MessageListener。编写一个接受一些参数并进行一些验证的方法。
在onMessage方法中,可以调用该方法传递适当的参数,如果条件满足,将消息加入队列,
在父方法中-
创建此 class 的实例并将其设置为 setMessageListener。
您可以使用 ActiveMQ 代理 Camel 组件拦截代理内的消息并使用 Camel 路由路由它们
以下是如何制作传入消息拦截器:
1.In 你的连接工厂:
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url, username, password);
connectionFactory.getServerLocator().setIncomingInterceptorList("com.itsgosho.emails.EmailIncomingInterceptor");
2.In 这个拦截器:
@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;
}
}
ActiveMQ 中是否有一项功能(可能与 Camel 一起使用)来执行以下操作?
- 在 broker 拦截传入消息
- 根据任意规则验证headersand/orbody
- 如果消息未经验证,则向发件人抛出异常,或者..
- 将无效邮件重新路由到 'rejection' queue
阅读您的描述,我推测您正在尝试对传入消息进行排队。
有一个新的内部 class,它实现了 MessageListener。编写一个接受一些参数并进行一些验证的方法。
在onMessage方法中,可以调用该方法传递适当的参数,如果条件满足,将消息加入队列,
在父方法中- 创建此 class 的实例并将其设置为 setMessageListener。
您可以使用 ActiveMQ 代理 Camel 组件拦截代理内的消息并使用 Camel 路由路由它们
以下是如何制作传入消息拦截器:
1.In 你的连接工厂:
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url, username, password);
connectionFactory.getServerLocator().setIncomingInterceptorList("com.itsgosho.emails.EmailIncomingInterceptor");
2.In 这个拦截器:
@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;
}
}