Beispiel #1
0
        public void WhenAddPeerMessageArrives_PeerIsAddedToConnectedPeerRegistry()
        {
            var peerIdentifier = new ReceiverIdentifier(Guid.NewGuid().ToByteArray());
            var payload        = new AddPeerMessage
            {
                SocketIdentity = peerIdentifier.Identity,
                Uri            = "tcp://127.0.0.1:8080",
                Health         = new global::kino.Messaging.Messages.Health
                {
                    Uri = "tcp://127.0.0.2:9090",
                    HeartBeatInterval = TimeSpan.FromSeconds(10)
                }
            };
            var message = Message.Create(payload);

            subscriberSocket.SetupMessageReceived(message, tokenSource.Token);
            //
            clusterHealthMonitor.Start();
            AsyncOp.Sleep();
            tokenSource.Cancel();
            clusterHealthMonitor.Stop();
            //
            Func <ClusterMemberMeta, bool> isPeerMetadata = meta =>
                                                            payload.Health.Uri == meta.HealthUri &&
                                                            payload.Health.HeartBeatInterval == meta.HeartBeatInterval &&
                                                            payload.Uri == meta.ScaleOutUri;

            connectedPeerRegistry.Verify(m => m.FindOrAdd(peerIdentifier, It.Is <ClusterMemberMeta>(meta => isPeerMetadata(meta))), Times.Once);
        }
Beispiel #2
0
        public void Consume(IConsumeContext <AddPeer> context)
        {
            // made a new friend, let's introduce ourselves, but may need to send
            // an addclient first, which would loop forever, so how do we only send
            // to people we just met? Observe a PeerAdded event? ;) OnPeerAdded/OnPeerRemoved

            if (_peerUri.Equals(context.SourceAddress))
            {
                return;
            }

            if (context.ResponseAddress == null)
            {
                return;
            }

            List <SubscriptionInformation> subscriptions = _router.LocalSubscriptions
                                                           .Select(x => new SubscriptionInformation(_peerId, x.SubscriptionId, x.MessageName, x.CorrelationId, x.EndpointUri))
                                                           .ToList();

            if (_log.IsInfoEnabled)
            {
                _log.InfoFormat("Sending {0} subscriptions to {1} from {2}", subscriptions.Count, context.SourceAddress, _peerUri);
            }

            IEndpoint clientEndpoint = _subscriptionBus.GetEndpoint(context.ResponseAddress);

            var addPeer = new AddPeerMessage
            {
                PeerId    = _peerId,
                PeerUri   = _peerUri,
                Timestamp = _producer.Timestamp,
            };

            clientEndpoint.Send(addPeer, sendContext =>
            {
                sendContext.SetNetwork(_network);
                sendContext.SetSourceAddress(_peerUri);
            });

            subscriptions.Each(x =>
            {
                var add = new AddPeerSubscriptionMessage
                {
                    PeerId         = _peerId,
                    MessageNumber  = 0,
                    SubscriptionId = x.SubscriptionId,
                    EndpointUri    = x.EndpointUri,
                    MessageName    = x.MessageName,
                    CorrelationId  = x.CorrelationId,
                };

                clientEndpoint.Send(add, sendContext =>
                {
                    sendContext.SetNetwork(_network);
                    sendContext.SetSourceAddress(_peerUri);
                });
            });
        }
        public IActionResult AddPeer([FromBody] AddPeerMessage messageInJson)
        {
            _logger.LogDebug("[POST] peer/add");
            _logger.LogTrace("@RequestBody:\n<message>\n{}\n</message>", messageInJson);
            if (!messageInJson.IsMessageValid())
            {
                return(BadRequest("Message is not valid"));
            }
            var success = _peerToPeerService.AddPeer(messageInJson.peerAddress);

            if (success)
            {
                return(Accepted("Added peer"));
            }
            else
            {
                return(BadRequest("Unable to connect to a peer."));
            }
        }