This forum has been archived. Please start a new discussion on GitHub.

Guaranteed message delivery

In some situations data sent between systems costs very much, so developer need to be very sure data was sent. Regardless of disconnection and time system was diconnected or even shut down. The only decision is to keep data to be sent persistent until receiving side confirms delivery. Can ICE store serialized methods' calls in nonvolatile memory and keep them persistent until delivery confirmed? In COM+ this feature is implemented and seems useful. Any comments?


  • I am not aware about such functionality provided by Ice out of the box. It might be possible to implement it yourself using
    AMI Interface. In particular section 6.15.7 Flow Control might be relevant. However, I think it is not a trivial task to implement it in reliable production quality way.
  • The problem can be split into two parts: (a) confirming that the data has been sent and (b) persisting the request.

    I will confine my answers to .NET as I am familiar with it.

    You can solve (a) by using two way invocations. You can solve (b) by using an object database which can store native objects. I would not recommend using a RDBMS because it would involve unpacking each object to fit into a non-object oriented database structure. A great example of an object database is db4o. Its one line: ".Add(object)" to write a complete object to the database, the object may contain collections, sub-objects, etc. Another example is .NET Caching Library from Kellerman. Another example is MongoDb which can pesist an object with one function call.
  • Of course i've solved this task. I've used MySQL for persisting and callback interface for confirming. But it would be great if ICE could do this task transparently.