I am not sure what do you mean. The whole point of the channel abstraction is to manage HOW two+ endpoints talk to each other which means if A wants to talk to B and only B, then you POJOs representing A and B are connected with DirectChannel (as below)
Code:
<int:service-activator input-channel="inChannel" output-channel="someChannel">
<bean class="foo.bar.Bar"/>
</int:service-activator>
<int:channel id="someChannel"/>
<int:service-activator input-channel="someChannel" output-channel="someOtherChannel">
<bean class="foo.bar.Baz"/>
</int:service-activator>
However if more then one endpoint is interested in what A has to say, then you simply switch from DirectChannel to PubSubChannel
Code:
<int:service-activator input-channel="inChannel" output-channel="someChannel">
<bean class="foo.bar.Bar"/>
</int:service-activator>
<int:publish-subscribe-channel id="someChannel"/>
<int:service-activator input-channel="someChannel" output-channel="someOtherChannel">
<bean class="foo.bar.Baz"/>
</int:service-activator>
<int:service-activator input-channel="someChannel" output-channel="someOtherChannel">
<bean class="foo.bar.Bazzzz"/>
</int:service-activator>
I am not sure what would duplicator do different?
Also, i would suggest to read up on Enterprise Integration Patterns http://www.eaipatterns.com/. This is where all these patterns come from