Version: 1.0.10 -- latest stable
I made a PersistentStreamProvider with a custom adapter that retains old messages in a cache (inside IQueueCache) and is able to replay it for new clients.
My problem is that I can't subscribe to it from normal non-grain objects.
My example is as follows:
- A producer app: sets some data on the "producer grain"
- A producer grain: creates a stream using my provider and writes to it every time it gets data
- A consumer app: creates a IAsyncObserver object that subscribes to same stream that the producer grain is writing to.
- A zeromq proxy app that acts as the physical queue i.e. my stream is internally using this to communicate.
- Orleans server
It works fine if:
- I replace the consumer app with a consumer grain that does the same thing.
- Instead of subscribing in the consumer app, I send the consumer object to the producer grain which does the subscription for me, as in
dataGrain.SubscribeMe(this) where this is the consumer object. This means that the subscription happens on the server side instead of the client side.
- Replace my custom persistent stream with SimpleMessageStreamProvider.
When I debug the source, I can see that it hangs in PersistentStreamPullingAgent.DoHandshakeWithConsumer:
requestedToken = await AsyncExecutorWithRetries.ExecuteWithRetries(
i => consumerData.StreamConsumer.GetSequenceToken(consumerData.SubscriptionId),
AsyncExecutorWithRetries.INFINITE_RETRIES,
(exception, i) => true,
config.MaxEventDeliveryTime,
DefaultBackoffProvider);
The source code for this sample project is here:
https://github.com/amamh/orleans-PipeStreamProvider/tree/netmq
Version: 1.0.10 -- latest stable
I made a PersistentStreamProvider with a custom adapter that retains old messages in a cache (inside IQueueCache) and is able to replay it for new clients.
My problem is that I can't subscribe to it from normal non-grain objects.
My example is as follows:
It works fine if:
dataGrain.SubscribeMe(this)wherethisis the consumer object. This means that the subscription happens on the server side instead of the client side.When I debug the source, I can see that it hangs in PersistentStreamPullingAgent.DoHandshakeWithConsumer:
The source code for this sample project is here:
https://github.com/amamh/orleans-PipeStreamProvider/tree/netmq