WSO2 ESB+;activeMQ
我是wso2 esb和jms的新手。我从soapUI向wso2 esb发送了一些消息。在我的wso序列中,一条经过处理的消息被发送到jms。是否可以从wso2 esb设置此消息的“生存时间”?还是其他方式 在AMQ中,我添加了以下内容:WSO2 ESB+;activeMQ,wso2,activemq,esb,ttl,amq,Wso2,Activemq,Esb,Ttl,Amq,我是wso2 esb和jms的新手。我从soapUI向wso2 esb发送了一些消息。在我的wso序列中,一条经过处理的消息被发送到jms。是否可以从wso2 esb设置此消息的“生存时间”?还是其他方式 在AMQ中,我添加了以下内容: <policyEntry queue="myQueue"> <deadLetterStrategy> <individualDeadLetterStrategy queuePrefix="DLQ." useQ
<policyEntry queue="myQueue">
<deadLetterStrategy>
<individualDeadLetterStrategy
queuePrefix="DLQ." useQueueForQueueMessages="true" />
</deadLetterStrategy>
差不多
我发现,唯一可行的方法是创建自己的中介,它将设置消息的生存时间并将其发送到队列。队列名称按顺序预设,然后称为中介:
<property xmlns="http://ws.apache.org/ns/synapse" name="qname" value="your_queue_name" scope="default" type="STRING"></property>
<class xmlns="http://ws.apache.org/ns/synapse" name="com.example.JMSMessageTimeToLiveMediator"></class>
中介类:
public class JMSMessageTimeToLiveMediator extends AbstractMediator implements
ManagedLifecycle {
private static String CON_FACTORY_NAME = "QueueConnectionFactory";
private static String DEF_PROP_QNAME = "qname";
private static long TIME_TO_LIVE = 60000;
private static QueueConnectionFactory cf;
public boolean mediate(MessageContext context) {
Connection connection = null;
Session session = null;
try {
connection = cf.createQueueConnection();
connection.start();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
String queueName = (String) context.getProperty(DEF_PROP_QNAME);
Destination destination = session.createQueue(queueName);
MessageProducer producer = session.createProducer(destination);
producer.setTimeToLive(TIME_TO_LIVE);
TextMessage message = session.createTextMessage(context
.getEnvelope().toString());
producer.send(message);
} catch (JMSException e) {
log.error("ProduceJMS ERROR: " + e.getClass() + " "
+ e.getMessage());
} catch (Exception e) {
log.error("ProduceJMS ERROR: " + e.getClass() + " "
+ e.getMessage());
} finally {
try {
session.close();
connection.close();
} catch (JMSException e) {
log.error("ProduceJMS ERROR: " + e.getMessage());
}
}
return true;
}
public void init(SynapseEnvironment emvironment) {
Hashtable<String, Object> environment = new Hashtable<String, Object>();
environment.put("java.naming.factory.initial",
"org.apache.activemq.jndi.ActiveMQInitialContextFactory");
log.debug("ProduceJMS INIT");
try {
InitialContext ic = new InitialContext(environment);
cf = (QueueConnectionFactory) ic.lookup(CON_FACTORY_NAME);
} catch (NamingException e) {
log.error("ProduceJMS INIT ERROR: " + e.getMessage());
}
}
public void destroy() {
}
公共类JMSMessageTimeMediator扩展了AbstractMediator实现
管理生命周期{
私有静态字符串CON_FACTORY_NAME=“QueueConnectionFactory”;
私有静态字符串DEF_PROP_QNAME=“QNAME”;
专用静态长时间到现场=60000;
私有静态队列连接工厂cf;
公共布尔中介(MessageContext上下文){
连接=空;
会话=空;
试一试{
connection=cf.createQueueConnection();
connection.start();
会话=connection.createSession(false,session.AUTO_-ACKNOWLEDGE);
String queueName=(String)context.getProperty(DEF_PROP_QNAME);
目的地=session.createQueue(queueName);
MessageProducer=session.createProducer(目的地);
producer.setTimeToLive(TIME-TO-LIVE);
TextMessage=session.createTextMessage(上下文)
.getEnvelope().toString());
生产者。发送(消息);
}捕获(JME){
log.error(“ProduceJMS错误:+e.getClass()+”)
+e.getMessage());
}捕获(例外e){
log.error(“ProduceJMS错误:+e.getClass()+”)
+e.getMessage());
}最后{
试一试{
session.close();
connection.close();
}捕获(JME){
log.error(“ProduceJMS错误:+e.getMessage());
}
}
返回true;
}
公共无效初始(SynapseEnvironment环境){
Hashtable环境=新的Hashtable();
put(“java.naming.factory.initial”,
“org.apache.activemq.jndi.ActiveMQInitialContextFactory”);
log.debug(“ProduceJMS INIT”);
试一试{
InitialContext ic=新的InitialContext(环境);
cf=(QueueConnectionFactory)ic.lookup(CON\u FACTORY\u NAME);
}捕获(NamingE例外){
log.error(“ProduceJMS初始化错误:+e.getMessage());
}
}
公共空间销毁(){
}
}如果您使用的是JMS消息存储,您可以将属性JMS\u PROD\u TIME\u设置为\u LIVE
<property name="JMS_PROD_TIME_TO_LIVE" value="15000" />
<store messageStore="my_jms_message_store" />
使用WSO2 ESB 4.9.0进行测试(使用synapse版本2.1.3-wso2v11)
您可以在中找到更多信息
您可以用同样的方法设置例如消息优先级(属性JMS\u PROD\u priority)。在soapUI中?你见过jms头吗?如果不是的话,值得一试。我尝试在wso2 esb中使用头中介。但是没有任何效果。在amq中接收的消息仍具有默认优先级4。