{"action":"created","issue":{"url":"https://api.github.com/repos/dotnet/orleans/issues/1046","labels_url":"https://api.github.com/repos/dotnet/orleans/issues/1046/labels{/name}","comments_url":"https://api.github.com/repos/dotnet/orleans/issues/1046/comments","events_url":"https://api.github.com/repos/dotnet/orleans/issues/1046/events","html_url":"https://github.com/dotnet/orleans/issues/1046","id":117896816,"number":1046,"title":"SimpleMessageStreamProvider uses a lot of internal classes","user":{"login":"undecided2013","id":5455854,"avatar_url":"https://avatars.githubusercontent.com/u/5455854?v=3","gravatar_id":"","url":"https://api.github.com/users/undecided2013","html_url":"https://github.com/undecided2013","followers_url":"https://api.github.com/users/undecided2013/followers","following_url":"https://api.github.com/users/undecided2013/following{/other_user}","gists_url":"https://api.github.com/users/undecided2013/gists{/gist_id}","starred_url":"https://api.github.com/users/undecided2013/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/undecided2013/subscriptions","organizations_url":"https://api.github.com/users/undecided2013/orgs","repos_url":"https://api.github.com/users/undecided2013/repos","events_url":"https://api.github.com/users/undecided2013/events{/privacy}","received_events_url":"https://api.github.com/users/undecided2013/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/dotnet/orleans/labels/question","name":"question","color":"cc317c"}],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":12,"created_at":"2015-11-19T20:05:53Z","updated_at":"2015-12-18T19:47:35Z","closed_at":null,"body":"It cannot be used as the basis for any new custom stream providers in external projects as they won't compile. If it is to be used as the template for new projects, it needs to illustrate usage of the extension points and public apis for creating custom stream providers."},"comment":{"url":"https://api.github.com/repos/dotnet/orleans/issues/comments/165881637","html_url":"https://github.com/dotnet/orleans/issues/1046#issuecomment-165881637","issue_url":"https://api.github.com/repos/dotnet/orleans/issues/1046","id":165881637,"user":{"login":"jason-bragg","id":10675494,"avatar_url":"https://avatars.githubusercontent.com/u/10675494?v=3","gravatar_id":"","url":"https://api.github.com/users/jason-bragg","html_url":"https://github.com/jason-bragg","followers_url":"https://api.github.com/users/jason-bragg/followers","following_url":"https://api.github.com/users/jason-bragg/following{/other_user}","gists_url":"https://api.github.com/users/jason-bragg/gists{/gist_id}","starred_url":"https://api.github.com/users/jason-bragg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jason-bragg/subscriptions","organizations_url":"https://api.github.com/users/jason-bragg/orgs","repos_url":"https://api.github.com/users/jason-bragg/repos","events_url":"https://api.github.com/users/jason-bragg/events{/privacy}","received_events_url":"https://api.github.com/users/jason-bragg/received_events","type":"User","site_admin":false},"created_at":"2015-12-18T19:47:35Z","updated_at":"2015-12-18T19:47:35Z","body":"To reinforce @undecided2013's original point:\r\n\r\nSince providers are extension points to the Orleans framework, they should utilize Orleans public interfaces.  Any internals of Orleans core or runtime, which we find we need to write providers, should be considered a barrier to others writing providers.  That is, if we can't write a provider without use of Orleans internals, how can we expect external developers to do so.\r\n\r\nI don't think we can/should perform a mass refactor of the existing streaming infrastructure, but incremental changes over time should get us where we need to go, especially if we can identify the main areas where we rely on internals.\r\n\r\nSome areas where we utilize internals:\r\n* Persistent stream pulling agent is a system target.\r\n* Queue Balancer interfaces are internal\r\n* Grain extensions utilize internals\r\n\r\nThe stream PubSub system interfaces are also internal, but none of its implementation is internal, so users should be able to develop their own similar system.  This is not true for the queue balancing infrastructure or the pulling agent.\r\n"}}