示例#1
0
        public void RegisterSelf(IEnumerable <MessageRoute> registrations, string domain)
        {
            var receiverRoutes = registrations.GroupBy(r => r.Receiver)
                                 .Select(g => new
            {
                ReceiverIdentifier = g.Key.Identity,
                Messages           = g.Key.IsActor()
                                                                              ? g.Select(x => x.Message)
                                                                              : Enumerable.Empty <MessageIdentifier>()
            })
                                 .Select(r => new RouteRegistration
            {
                ReceiverIdentity = r.ReceiverIdentifier,
                MessageContracts = r.Messages.Select(m => new MessageContract
                {
                    Identity  = m.Identity,
                    Partition = m.Partition,
                    Version   = m.Version
                })
                                   .ToArray()
            }).ToArray();
            var scaleOutAddress = scaleOutConfigurationProvider.GetScaleOutAddress();

            var message = Message.Create(new RegisterExternalMessageRouteMessage
            {
                Uri          = scaleOutAddress.Uri.ToSocketAddress(),
                NodeIdentity = scaleOutAddress.Identity,
                Health       = new Messaging.Messages.Health
                {
                    Uri = heartBeatConfigurationProvider.GetHeartBeatAddress()
                          .ToSocketAddress(),
                    HeartBeatInterval = heartBeatConfigurationProvider.GetHeartBeatInterval()
                },
                Routes = receiverRoutes
            })
                          .As <Message>();

            message.SetDomain(domain);
            message.SignMessage(securityProvider);
            autoDiscoverySender.EnqueueMessage(message);
        }