นี่คือตัวอย่างการใช้แนวคิดบริการด้วยรหัสจริง (ด้านล่าง)
สิ่งที่ต้องทำคือการกำหนดค่าบัสบริการที่สิ้นเปลืองคิวและรับฟังข้อความจากเว็บเซิร์ฟเวอร์และไคลเอนต์ GUI
เมื่อได้รับข้อความมันทำสิ่งที่ตรรกะโดเมนรับประกันมันจะบันทึกเหตุการณ์ไปยังดิสก์และเผยแพร่เหตุการณ์เหล่านั้นไปที่นายหน้าข้อความ
แอปพลิเคชันขนาดใหญ่ส่วนใหญ่ที่ทำงานควบคู่กันอย่างหลวม ๆ ใช้สถาปัตยกรรม "ผู้ปฏิบัติงาน" บางอย่างเช่นสิ่งที่อยู่ด้านล่าง
โครงการ Documently เป็นโครงการตัวอย่างที่เราสร้างขึ้นสำหรับคนอย่างคุณเพื่อเรียนรู้สถาปัตยกรรมแบบกระจาย คุณสามารถถามคำถามกับฉันโดยตรงในโครงการหรือแยกมันและใช้คุณสมบัติบางอย่างเพื่อเรียนรู้จากนั้นส่งคำขอดึง (และรับรหัสความคิดเห็น)
https://github.com/haf/Documently/blob/master/src/Documently.Domain.Service/Program.cs :
using System.Threading;
using Castle.MicroKernel.Registration;
using Castle.Windsor;
using Documently.Infrastructure;
using Documently.Infrastructure.Installers;
using MassTransit;
using Topshelf;
using log4net;
using log4net.Config;
namespace Documently.Domain.Service
{
class Program
{
private static readonly ILog _Logger = LogManager.GetLogger(typeof (Program));
private IWindsorContainer _Container;
private IServiceBus _Bus;
public static void Main(string[] args)
{
Thread.CurrentThread.Name = "Domain Service Main Thread";
HostFactory.Run(x =>
{
x.Service<Program>(s =>
{
s.ConstructUsing(name => new Program());
s.WhenStarted(p => p.Start());
s.WhenStopped(p => p.Stop());
});
x.RunAsLocalSystem();
x.SetDescription("Handles the domain logic for the Documently Application.");
x.SetDisplayName("Documently Domain Service");
x.SetServiceName("Documently.Domain.Service");
});
}
private void Start()
{
XmlConfigurator.Configure();
_Logger.Info("setting up domain service, installing components");
_Container = new WindsorContainer()
.Install(
new RavenDbServerInstaller(),
new CommandHandlerInstaller(),
new EventStoreInstaller(),
new BusInstaller(Keys.DomainServiceEndpoint)
);
_Container.Register(Component.For<IWindsorContainer>().Instance(_Container));
_Bus = _Container.Resolve<IServiceBus>();
_Logger.Info("application configured, started running");
}
private void Stop()
{
_Logger.Info("shutting down Domain Service");
_Container.Release(_Bus);
_Container.Dispose();
}
}
}