RavenDB Session Management with NServiceBus
Join the DZone community and get the full member experience.
Join For FreeI got a few questions about this in the past, and I thought that I might as well just post how I recommend deal with RavenDB session management for NServiceBus:
public class RavenSessionMessageModule : IMessageModule { ThreadLocal<IDocumentSession> currentSession = new ThreadLocal<IDocumentSession>(); RavenSessionMessageModule store; public RavenSessionMessageModule(IDocumentStore store) { this.store = store; } public IDocumentSession CurrentSession { get{ return currentSession.Value; } } public void HandleBeingMessage() { currentSession.Value = store.OpenSession(); } public void HandleEndMessage() { using(var old = currentSession.Value) { currentSession.Value = null; old.SaveChanges(); } } public void HandleError() { using(var old = currentSession.Value) currentSession.Value = null; } }
When any of your message handlers needs to get the session, you need to wire the container in such a way that it would provide the RavenSessionMessageModule.CurrentSession to it.
Published at DZone with permission of Oren Eini, DZone MVB. See the original article here.
Opinions expressed by DZone contributors are their own.
Comments