我在Mule中有一个bean,它需要在TCP端点关机时断开连接之前发送消息。该bean实现了生命周期,并配置了“depends on =connector”,但看起来“depends on”对关闭顺序没有影响。在我的bean上调用stop方法时,端点不再连接。在端点或连接器上调用"stop“方法之前,有没有办法在bean上调用它?我正在使用Mule 3.7CE。
发布于 2017-03-22 23:10:31
尝试侦听MuleContextNotification并等待CONTEXT_STOPPING操作触发您的TCP调用。
如下例所示:
public class MuleContextListener implements MuleContextNotificationListener<MuleContextNotification>,MuleContextAware {
private MuleContext context;
private final static Logger logger = LogManager.getLogger(MuleContextListener.class);
@Override
public void onNotification(MuleContextNotification notification) {
logger.info("NOTIFICATION RECEIVED!!!!!");
logger.info(MuleContextNotification.getActionName(notification.getAction()));
if(notification.getAction() == MuleContextNotification.CONTEXT_STOPPING ){
//replace with your tcp call
logger.info(" MY ACTION HAS BEEN TRIGGER");
}
}
@Override
public void setMuleContext(MuleContext context) {
this.context = context;
}
}为了测试,我有另一个实现生命周期可停止的bean……
public class ClassStopLc implements Stoppable {
@Override
public void stop() throws MuleException {
logger.info(" ClassStopLC Stopping");
}如果我检查我的日志:
2017-03-22 16:08:26,827 [[mulecontextaware].mulecontextawareFlow.1.02] INFO mulecontextaware.MuleContextListener - NOTIFICATION RECEIVED!!!!!
2017-03-22 16:08:26,827 [[mulecontextaware].mulecontextawareFlow.1.02] INFO mulecontextaware.MuleContextListener - mule context stopping
2017-03-22 16:08:26,827 [[mulecontextaware].mulecontextawareFlow.1.02] INFO mulecontextaware.MuleContextListener - MY ACTION HAS BEEN TRIGGER
.
.
.
2017-03-22 16:08:32,077 [[mulecontextaware].mulecontextawareFlow.1.02] INFO org.mule.util.queue.QueueXaResourceManager - Stopping ResourceManager
2017-03-22 16:08:32,077 [[mulecontextaware].mulecontextawareFlow.1.02] INFO org.mule.util.queue.QueueXaResourceManager - Stopped ResourceManager
2017-03-22 16:08:32,080 [[mulecontextaware].mulecontextawareFlow.1.02] INFO mulecontextaware.ClassStopLc - ClassStopLC Stopping
2017-03-22 16:08:32,082 [[mulecontextaware].mulecontextawareFlow.1.02] INFO mulecontextaware.MuleContextListener - NOTIFICATION RECEIVED!!!!!
2017-03-22 16:08:32,082 [[mulecontextaware].mulecontextawareFlow.1.02] INFO mulecontextaware.MuleContextListener - mule context stopped
2017-03-22 16:08:32,083 [[mulecontextaware].mulecontextawareFlow.1.02] INFO mulecontextaware.MuleContextListener - NOTIFICATION RECEIVED!!!!!
2017-03-22 16:08:32,083 [[mulecontextaware].mulecontextawareFlow.1.02] INFO mulecontextaware.MuleContextListener - mule context disposing不确定停止阶段是否允许您进行TCP调用而没有任何问题,您可以尝试让我知道吗?我很好奇:)
发布于 2017-03-21 20:38:38
你能指定你的Bean实现的是哪个生命周期吗?另外,这是单例Bean还是原型Bean?
根据文档-- https://docs.mulesoft.com/mule-user-guide/v/3.7/developing-components#component-lifecycle
您可以实现接口org.mule.api.lifecycle.Callable,只需使用方法onCall,就可以触发任何操作。
示例:
public class MyClass implements Callable {
@Override
public Object onCall(MuleEventContext eventContext) throws Exception {
//DO SOMETHING
//Call STOP method
return eventContext.getMessage().getPayload();
}}https://stackoverflow.com/questions/42796858
复制相似问题