NSBCon 2014 London - Mark Taling and Roy Cornelissen
-
Upload
particular-software -
Category
Technology
-
view
617 -
download
2
description
Transcript of NSBCon 2014 London - Mark Taling and Roy Cornelissen
![Page 1: NSBCon 2014 London - Mark Taling and Roy Cornelissen](https://reader033.fdocuments.us/reader033/viewer/2022060121/55948a2b1a28ab077d8b474e/html5/thumbnails/1.jpg)
~
![Page 2: NSBCon 2014 London - Mark Taling and Roy Cornelissen](https://reader033.fdocuments.us/reader033/viewer/2022060121/55948a2b1a28ab077d8b474e/html5/thumbnails/2.jpg)
~
Roy CornelissenSoftware Architect
@roycornelissen
Mark TalingLead Developer
@marktaling
![Page 3: NSBCon 2014 London - Mark Taling and Roy Cornelissen](https://reader033.fdocuments.us/reader033/viewer/2022060121/55948a2b1a28ab077d8b474e/html5/thumbnails/3.jpg)
Where we started
Discovering NServiceBus
Multi tenancy
Saga’s
The evolution of NServiceBus
Performance considerations
Maintainability
NServiceBus in a brownfield
Wrap up
Q&A
![Page 4: NSBCon 2014 London - Mark Taling and Roy Cornelissen](https://reader033.fdocuments.us/reader033/viewer/2022060121/55948a2b1a28ab077d8b474e/html5/thumbnails/4.jpg)
Inte
grat
ion
La
yer
Serv
ice
Laye
r
NIS
Pre
sen
tati
on
La
yer
Planning UI Reporting UI
customer external apps
Employee Self Service
Common Forecast Realization PaymentSchedule
![Page 5: NSBCon 2014 London - Mark Taling and Roy Cornelissen](https://reader033.fdocuments.us/reader033/viewer/2022060121/55948a2b1a28ab077d8b474e/html5/thumbnails/5.jpg)
Monitoring & Control
Inte
grat
ion
La
yer
Serv
ice
Laye
r
NIS
Pre
sen
tati
on
La
yer
Planning UI Reporting UIEmployee Self
Service
Common Forecast PaymentSchedule
Service Bus
Integration Services
IS HRM
IS Payroll
IS Budget
IS Provisioning
IS Time
IS Point of Sale
Realization
![Page 6: NSBCon 2014 London - Mark Taling and Roy Cornelissen](https://reader033.fdocuments.us/reader033/viewer/2022060121/55948a2b1a28ab077d8b474e/html5/thumbnails/6.jpg)
![Page 7: NSBCon 2014 London - Mark Taling and Roy Cornelissen](https://reader033.fdocuments.us/reader033/viewer/2022060121/55948a2b1a28ab077d8b474e/html5/thumbnails/7.jpg)
Tenant ID
Tenant ID
Tenant ID
Tenant ID
![Page 8: NSBCon 2014 London - Mark Taling and Roy Cornelissen](https://reader033.fdocuments.us/reader033/viewer/2022060121/55948a2b1a28ab077d8b474e/html5/thumbnails/8.jpg)
public class BuildPrincipalFromHeaders : IMutateIncomingMessages{
public object MutateIncoming(object message){
Thread.CurrentPrincipal = null;
string tenantId = Headers.GetMessageHeader(message, “urn:dv:tenantid”);
ICollection<Claim> claims = new List<Claim>();…claims.Add(new Claim(SecurityConstants.TenantIdClaim, tenantId));
var principal = new ClaimsPrincipal(new ClaimsIdentityCollection { new ClaimsIdentity(claims) });
Thread.CurrentPrincipal = principal;
return message;}
…
![Page 9: NSBCon 2014 London - Mark Taling and Roy Cornelissen](https://reader033.fdocuments.us/reader033/viewer/2022060121/55948a2b1a28ab077d8b474e/html5/thumbnails/9.jpg)
public class SetHeadersFromPrincipal : IMutateOutgoingMessages{
public IBus Bus { get; set; }
public object MutateOutgoing(object message){
IClaimsIdentity identity =Thread.CurrentPrincipal.Identity as IClaimsIdentity;
string tenantId = identity.GetTenantId();
if (!string.IsNullOrWhiteSpace(tenantId)){
Bus.SetMessageHeader(message, “urn:dv:tenantid”, tenantId);}
return message;}
…
![Page 10: NSBCon 2014 London - Mark Taling and Roy Cornelissen](https://reader033.fdocuments.us/reader033/viewer/2022060121/55948a2b1a28ab077d8b474e/html5/thumbnails/10.jpg)
- Multiple properties- Concatenation- IFindSaga
- ISagaPersister
![Page 11: NSBCon 2014 London - Mark Taling and Roy Cornelissen](https://reader033.fdocuments.us/reader033/viewer/2022060121/55948a2b1a28ab077d8b474e/html5/thumbnails/11.jpg)
public class AdvancedRavenSagaPersister : RavenSagaPersister, ISagaPersister{private readonly RavenSessionFactory _sessionFactory;
public AdvancedRavenSagaPersister(RavenSessionFactory sessionFactory):base(sessionFactory)
{_sessionFactory = sessionFactory;
}
public new void Save(IContainSagaData saga){base.Save(saga);StoreMappingKeys(saga);
}
public new void Complete(IContainSagaData saga){RemoveMappingKeys(saga);base.Complete(saga);
}
void ISagaPersister.Save(IContainSagaData saga) { Save(saga); }
void ISagaPersister.Complete(IContainSagaData saga) { Complete(saga); }}
var document = _sessionFactory.Session.Include("SagaDocId").Load<SagaMappingIdentity>(mappingId);return _sessionFactory.Session.Load<TSagaData>(document.SagaId);
![Page 12: NSBCon 2014 London - Mark Taling and Roy Cornelissen](https://reader033.fdocuments.us/reader033/viewer/2022060121/55948a2b1a28ab077d8b474e/html5/thumbnails/12.jpg)
![Page 13: NSBCon 2014 London - Mark Taling and Roy Cornelissen](https://reader033.fdocuments.us/reader033/viewer/2022060121/55948a2b1a28ab077d8b474e/html5/thumbnails/13.jpg)
![Page 14: NSBCon 2014 London - Mark Taling and Roy Cornelissen](https://reader033.fdocuments.us/reader033/viewer/2022060121/55948a2b1a28ab077d8b474e/html5/thumbnails/14.jpg)
![Page 15: NSBCon 2014 London - Mark Taling and Roy Cornelissen](https://reader033.fdocuments.us/reader033/viewer/2022060121/55948a2b1a28ab077d8b474e/html5/thumbnails/15.jpg)
RequestUtcTimeout<PolicyRenewal>(TimeSpan.FromDays(300));
![Page 16: NSBCon 2014 London - Mark Taling and Roy Cornelissen](https://reader033.fdocuments.us/reader033/viewer/2022060121/55948a2b1a28ab077d8b474e/html5/thumbnails/16.jpg)
Lessons learned- Upgrade regularly- Retry PoCs and assumptions- Beware of abstractions
![Page 17: NSBCon 2014 London - Mark Taling and Roy Cornelissen](https://reader033.fdocuments.us/reader033/viewer/2022060121/55948a2b1a28ab077d8b474e/html5/thumbnails/17.jpg)
Keep yourtransactions on a diet
Design withparallelism in mind
{Tx}{Tx}{Tx}
[Unique] saga properties
![Page 18: NSBCon 2014 London - Mark Taling and Roy Cornelissen](https://reader033.fdocuments.us/reader033/viewer/2022060121/55948a2b1a28ab077d8b474e/html5/thumbnails/18.jpg)
![Page 19: NSBCon 2014 London - Mark Taling and Roy Cornelissen](https://reader033.fdocuments.us/reader033/viewer/2022060121/55948a2b1a28ab077d8b474e/html5/thumbnails/19.jpg)
![Page 20: NSBCon 2014 London - Mark Taling and Roy Cornelissen](https://reader033.fdocuments.us/reader033/viewer/2022060121/55948a2b1a28ab077d8b474e/html5/thumbnails/20.jpg)
![Page 21: NSBCon 2014 London - Mark Taling and Roy Cornelissen](https://reader033.fdocuments.us/reader033/viewer/2022060121/55948a2b1a28ab077d8b474e/html5/thumbnails/21.jpg)
UseTransport<Rfc1149>();
![Page 22: NSBCon 2014 London - Mark Taling and Roy Cornelissen](https://reader033.fdocuments.us/reader033/viewer/2022060121/55948a2b1a28ab077d8b474e/html5/thumbnails/22.jpg)
NServiceBus is an opinionated framework
If it fits, it fits like a glove
Prepare to make concessions at first
Clean up later
Messaging makes totally different use cases possible
Requires a new mindset for everyone
![Page 23: NSBCon 2014 London - Mark Taling and Roy Cornelissen](https://reader033.fdocuments.us/reader033/viewer/2022060121/55948a2b1a28ab077d8b474e/html5/thumbnails/23.jpg)
NServiceBus is a great
way to break open
existing architectures
Despite its flexibility and
pluggability, always follow
its design principles
Go with the flow, it solves
real life problems you
might not know you have
![Page 24: NSBCon 2014 London - Mark Taling and Roy Cornelissen](https://reader033.fdocuments.us/reader033/viewer/2022060121/55948a2b1a28ab077d8b474e/html5/thumbnails/24.jpg)
~
Roy CornelissenSoftware Architect
@roycornelissen
Mark TalingLead Developer
@marktaling
blogs.infosupport.com