I am writing a public transport system using RTI DDS, but I met a strange problem:
This situation works well:
1. start a passenger subscriber with content filtered topic
2. start publishers
3. the passenger subsriber gets the messages well
4. start a second passenger subscriber with a different content filtered topic
5. the second passenger subscriber gets the messages well
This situation has problem:
1. start a operator subscriber
2. start a passenger subscriber with content filtered topic
3. start publishers
4. the operator subscriber gets the messages well
5. the passenger subscriber can get the expected message
6. start a second passenger subsciber with a different content filtered topic
7. the second passenger subscriber can not receive any message
This situation also works fine:
1. start a passenger subscriber with content filtered topic
2. start a second passenger subscriber with content filtered topic
3. start publishers
4. both passenger subscribers can get the expected message
5. start two new passenger subscibers with different content filtered topic
6. both of new passenger subscribers receive message well
Please note that the new passenger subscribers with different content filtered topic were started by the program, not by me through command line. And they still can not receive any messages even I removed the content filter. Seems that this problem was caused by that operator subscriber. I am really confused... Can anyone help me? Thank you!
Can you please post the code.. and some instruction on how to build..
Thanks,
gp
Sorry I can not post the code now...it's a project for a class, due next month.
Ok, can you try to set Durability to TRANSIENT_LOCAL and be sure that RELIABILITY is also set.
gp
Why? I do not want the datareader to get the messages published before it is created...
To gp: your answer really works! Actually before I set the QoS mentioned in your answer, the new subscribers can receive the messages, but for some cases, some messages will be lost. I asked the question, becasue I happened to try for these cases, and I did not wait for enough time, so I thought the new subscribers can not receive messages. After I tried your suggestion, the messages will not be lost, however, there is some delay now... Thank you very much!
I just found that the reason the new subscriber can not get any messages is not because of QoS, it's because of the way the subscriber is started. After I changed the way starting the new subscriber:
a) If I do not set the QoS, some messages will be lost for some cases
b) If I set the QoS, messages will not be lost for these cases, but there is delay
How were you starting the subscriber? And how are you starting it now?
Previously I started new subscriber from inside old subscriber, now I start it from outside the old subscriber...
With starting it from inside an old subscriber, do you mean in a call back? If yes, please have a look to chapter 17 of RTI_DDS_UserManual.pdf
Yes. Did you mean I should set use_shared_exclusive_area to true? But this will reduce the concurrency, right? So starting from outside is still better?