指尖上的代码--之ACTIVEMQ(5)

ResponseCorrelator—有响应的消息发送

现在来回答一下第二个问题,为什么装饰对象继承了TransportListener

先来看一下Transport接口,刨去其他辅助类功能,真正发送消息的是以下四个方法。

public interface Transport extends Service {
    void oneway(Object command) throws IOException;

    FutureResponse asyncRequest(Object command, ResponseCallback responseCallback) throws IOException;

    Object request(Object command) throws IOException;

    Object request(Object command, int timeout) throws IOException;
	
	……
}
 void oneway(Object command) -- 单向异步发送,没有响应结果

 

FutureResponse asyncRequest(Object command, ResponseCallback responseCallback) – 异步发送,返回结果的封装类FutureResponse,并回调ResponseCallbackonCompletion方法。

 

Object request(Object command) –- 同步发送,等待结果返回

 

Object request(Object command, int timeout) –- 同步发送,并设置结果返回的超时时间

 

如果说发送消息的过程是正向过程,从装饰对象一层一层一直到被装饰对象最后发送消息。那么响应消息刚刚相反从后往前返回响应消息,做相关处理。那么如何做到这一点?

装饰模式达到间接地了正向发送消息的效果,虽然说装饰模式并不是为了这个目的而使用的,它的目标是动态的组合功能,达到这个目标的途径是由外而内的调用。而观察者模式刚好相反,可以一层一层从被观察的对象回调回来。这里的配合简直天衣无缝。再加上合成模式的使用,更好的完成了重连的功能。



 顺序图中展示了发送消息和消息响应的过程包括消息响应回调

 

猜你喜欢

转载自jinguzhong.iteye.com/blog/1565929