What I did:
Three nodes (say 1, 2, 3) are connected by two cables, i.e,
1
------2
====3
where node 2
has two interfaces to connect to 1
and 3
respectively.
I defined a Keyed Topic T + KeyA
and apply it on both 1
and 3
, while defining a different Keyed Topic T + KeyB
on node 2
.
Where I failed:
I thought by such a definition, nodes 1
and 3
should have communicated with each other, but actually they didn't.
My problem is:
when I don't want node 2
to react to messages actively, how to make node 1
communicate with node 3
? Is it possible by using DDS? Thanks for any help.
It looks like you need something to bridge DDS traffic across node 2. This would not happen by default, but there are certainly a few options to get it to work.
It could be accomplished at a lower network layer. [You don't specify the networking layer; I assume ETHERNET.] By setting node 2 to act as a router, and configuring various aspects of its behavior, you should be able to get DDS network traffic to pass seamlessly across it. This can be somewhat complicated, and requires knowledge of router configuration and some specifics of the DDS network protocol (RTPS).
Alternatively, you could deploy a DDS application on node 2. That application would need to perform a "bridge" function, accepting data from interface connected to node 1 and repeating it to interface connected to node 3; and vice-versa. This app would be operating at a 'higher' level in the network stack. Some DDS vendors offer tools that accomplish exactly this (for example: the CoreDX DDS Mux product from Twin Oaks Computing, my company).