public ReceiveExceptionObserver(INetMQRequestServer netMQRequestServer, ISerializer serializer) { Guard.AgainstNull(netMQRequestServer, nameof(netMQRequestServer)); Guard.AgainstNull(serializer, nameof(serializer)); _netMqRequestServer = netMQRequestServer; _serializer = serializer; _log = Log.For(this); }
public void Start() { _log.Information("[starting]"); _kernel = new StandardKernel(); var configuration = NetMQServerSection.GetConfiguration(); var container = ContainerFactory.Create(_kernel, configuration); var queueFactoryType = typeof(IQueueFactory); var queueFactoryImplementationTypes = new HashSet <Type>(); void AddQueueFactoryImplementationType(Type type) { queueFactoryImplementationTypes.Add(type); } if (configuration.ScanForQueueFactories) { foreach (var type in new ReflectionService().GetTypesAssignableTo <IQueueFactory>()) { AddQueueFactoryImplementationType(type); } } foreach (var type in configuration.QueueFactoryTypes) { AddQueueFactoryImplementationType(type); } container.RegisterCollection(queueFactoryType, queueFactoryImplementationTypes, Lifestyle.Singleton); var queueManager = container.Resolve <IQueueManager>(); foreach (var queueFactory in container.ResolveAll <IQueueFactory>()) { queueManager.RegisterQueueFactory(queueFactory); } _requestServer = container.Resolve <INetMQRequestServer>(); _server = container.Resolve <INetMQServer>().Start(); _log.Information("[started]"); }
public GetFrameObserver(INetMQRequestServer netMQRequestServer) { Guard.AgainstNull(netMQRequestServer, nameof(netMQRequestServer)); _netMQRequestServer = netMQRequestServer; }
public void Should_be_able_to_perform_request_response() { const int port = 3030; const string queueName = "memory-queue"; var configuration = new NetMQServerConfiguration { Port = port }; configuration.AddQueueFactoryType(typeof(MemoryQueueFactory)); configuration.AddQueue(new QueueConfiguration(queueName, "memory://memory-queue")); var container = ContainerFactory.Create(new StandardKernel(), configuration); ((DefaultPipelineFactory)container.Resolve <IPipelineFactory>()).Assign(container); var server = container.Resolve <INetMQServer>(); INetMQRequestServer requestServer = null; INetMQRequestClient requestClient = null; var ipEndpoint = new IPEndPoint(IPAddress.Loopback, port); try { server.Start(); var serializer = container.Resolve <ISerializer>(); requestServer = container.Resolve <INetMQRequestServer>(); requestClient = container.Resolve <INetMQRequestClientProvider>() .Get(ipEndpoint, TimeSpan.FromSeconds(30)); var isEmptyResponse = requestClient.GetResponse <IsEmptyResponse>(new IsEmptyRequest(), queueName); Assert.That(isEmptyResponse.Result, Is.True); var transportMessage = new TransportMessage { MessageType = "test", Message = new byte[] { 1, 2, 3, 4 } }; var response = requestClient.GetResponse <Response>( new EnqueueRequest { StreamBytes = serializer.Serialize(transportMessage).ToBytes(), TransportMessage = transportMessage }, queueName); Assert.That(response.IsOk, Is.True); isEmptyResponse = requestClient.GetResponse <IsEmptyResponse>(new IsEmptyRequest(), queueName); Assert.That(isEmptyResponse.Result, Is.False); var getMessageResponse = requestClient.GetResponse <GetMessageResponse>(new GetMessageRequest(), queueName); Assert.That(response.IsOk, Is.True); transportMessage = (TransportMessage)serializer.Deserialize(typeof(TransportMessage), new MemoryStream(getMessageResponse.StreamBytes)); Assert.That(transportMessage.MessageType, Is.EqualTo("test")); var bytes = transportMessage.Message.ToArray(); Assert.That(bytes[0], Is.EqualTo(1)); Assert.That(bytes[1], Is.EqualTo(2)); Assert.That(bytes[2], Is.EqualTo(3)); Assert.That(bytes[3], Is.EqualTo(4)); isEmptyResponse = requestClient.GetResponse <IsEmptyResponse>(new IsEmptyRequest(), queueName); Assert.That(isEmptyResponse.Result, Is.True); response = requestClient.GetResponse <Response>( new ReleaseRequest { AcknowledgementToken = getMessageResponse.AcknowledgementToken }, queueName); Assert.That(response.IsOk, Is.True); isEmptyResponse = requestClient.GetResponse <IsEmptyResponse>(new IsEmptyRequest(), queueName); Assert.That(isEmptyResponse.Result, Is.False); getMessageResponse = requestClient.GetResponse <GetMessageResponse>(new GetMessageRequest(), queueName); Assert.That(getMessageResponse.IsOk, Is.True); isEmptyResponse = requestClient.GetResponse <IsEmptyResponse>(new IsEmptyRequest(), queueName); Assert.That(isEmptyResponse.Result, Is.True); response = requestClient.GetResponse <Response>( new AcknowledgeRequest { AcknowledgementToken = getMessageResponse.AcknowledgementToken }, queueName); Assert.That(response.IsOk, Is.True); response = requestClient.GetResponse <Response>( new ReleaseRequest { AcknowledgementToken = getMessageResponse.AcknowledgementToken }, queueName); Assert.That(response.IsOk, Is.True); isEmptyResponse = requestClient.GetResponse <IsEmptyResponse>(new IsEmptyRequest(), queueName); Assert.That(isEmptyResponse.Result, Is.True); getMessageResponse = requestClient.GetResponse <GetMessageResponse>(new GetMessageRequest(), queueName); Assert.That(getMessageResponse.IsOk, Is.True); Assert.That(getMessageResponse.AcknowledgementToken, Is.Null); Assert.That(getMessageResponse.StreamBytes, Is.Null); } finally { requestClient?.AttemptDispose(); requestServer?.AttemptDispose(); server?.AttemptDispose(); } }