コード例 #1
0
        public static IPipelineChannelOutgoing <P> AddChannelOutgoing <P>(this P pipeline
                                                                          , string channelId
                                                                          , string description = null
                                                                          , IEnumerable <SenderPartitionConfig> partitions = null
                                                                          , bool?boundaryLoggingEnabled = null
                                                                          , bool internalOnly           = false
                                                                          , Action <IPipelineChannelOutgoing <P>, Channel> assign = null
                                                                          , bool autosetPartition01 = true
                                                                          )
            where P : IPipeline
        {
            var channel = pipeline.ToMicroservice().Communication.RegisterChannel(
                new Channel(channelId, ChannelDirection.Outgoing, description, boundaryLoggingEnabled, internalOnly));

            if (partitions == null && autosetPartition01)
            {
                partitions = SenderPartitionConfig.Init(0, 1);
            }

            channel.Partitions = partitions?.ToList();

            var cpipe = new ChannelPipelineOutgoing <P>(pipeline, channel);

            assign?.Invoke(cpipe, cpipe.Channel);

            return(cpipe);
        }
コード例 #2
0
 /// <summary>
 /// This is the default constructor for the Azure service bus sender.
 /// </summary>
 public QueueEventSource() : base()
 {
     mJsonSerializer = new JsonSerializer {
         TypeNameHandling = TypeNameHandling.Auto
     };
     PriorityPartitions = SenderPartitionConfig.Init(1).ToList();
 }
コード例 #3
0
        //Outgoing
        public static C AttachPriorityPartition <C>(this C pipeline
                                                    , SenderPartitionConfig config)
            where C : IPipelineChannelOutgoing <IPipeline>
        {
            AttachPriorityPartition <SenderPartitionConfig>(pipeline, config);

            return(pipeline);
        }
コード例 #4
0
        /// <summary>
        /// This method creates the client.
        /// </summary>
        /// <param name="partition">The sender partitions.</param>
        /// <returns>Returns the client holder.</returns>
        protected override TcpTlsClientHolder ClientCreate(SenderPartitionConfig partition)
        {
            var client = base.ClientCreate(partition);

            client.Type = "TcpTls Sender";
            client.Name = partition.Priority.ToString();

            return(client);
        }
コード例 #5
0
        /// <summary>
        /// This is the default client create logic for the manual sender.
        /// </summary>
        /// <param name="partition">The partition collection.</param>
        /// <returns>
        /// Returns the client.
        /// </returns>
        protected override ManualChannelClientHolder ClientCreate(SenderPartitionConfig partition)
        {
            var client = base.ClientCreate(partition);

            client.Name = mPriorityClientNamer(ChannelId, partition.Priority);

            client.IncomingAction = ProcessInvoke;

            return(client);
        }
コード例 #6
0
        /// <summary>
        /// This is the default client create logic.
        /// </summary>
        /// <param name="partition"></param>
        /// <returns>
        /// Returns the client.
        /// </returns>
        protected override UdpClientHolder ClientCreate(SenderPartitionConfig partition)
        {
            var client = base.ClientCreate(partition);

            client.ContentType     = ContentType;
            client.ContentEncoding = ContentEncoding;

            client.Start = () =>
            {
                client.Client = client.ClientCreate();

                client.IsActive = true;
            };

            client.ClientCreate = () =>
            {
                var c = new UdpHelper(Config, UdpHelperMode.Sender);
                c.Start();
                return(c);
            };

            client.ClientClose = () => client.Client.Stop();

            client.MessagePack = (p) =>
            {
                var holder = p.Message.Blob;

                if (holder.ContentType == null)
                {
                    holder.ContentType = ContentType;
                }

                if (holder.ContentEncoding == null)
                {
                    holder.ContentEncoding = ContentEncoding;
                }

                if (!PayloadSerializer.TryPayloadSerialize(holder))
                {
                    throw new ArgumentException("Cannot serialize.");
                }

                if (holder.Blob.Length > UdpMessageMaximumPayloadSize)
                {
                    //throw new
                }

                return(holder);
            };

            return(client);
        }
コード例 #7
0
        /// <summary>
        /// This is the default client create logic.
        /// </summary>
        /// <param name="partition">The specific partition to create the client.</param>
        /// <returns>
        /// Returns the client.
        /// </returns>
        protected override AzureClientHolder <C, M> ClientCreate(SenderPartitionConfig partition)
        {
            var client = base.ClientCreate(partition);

            client.Start = () =>
            {
                client.Client   = client.ClientCreate();
                client.IsActive = true;
            };

            client.ClientClose = () => client.Client.CloseAsync().Wait();

            return(client);
        }
コード例 #8
0
        public static C AttachPriorityPartition <C>(this C pipeline, params int[] init)
            where C : IPipelineChannel
        {
            if (pipeline is IPipelineChannelIncoming)
            {
                ListenerPartitionConfig.Init(init).ForEach((p) => AttachPriorityPartition <ListenerPartitionConfig>(pipeline, p));
            }
            else if (pipeline is IPipelineChannelOutgoing)
            {
                SenderPartitionConfig.Init(init).ForEach((p) => AttachPriorityPartition <SenderPartitionConfig>(pipeline, p));
            }
            else
            {
                throw new ArgumentOutOfRangeException("AttachPriorityPartition unexpected partition type.");
            }

            return(pipeline);
        }
コード例 #9
0
        /// <summary>
        /// use this command to add a channel to a Microservice.
        /// </summary>
        /// <param name="pipeline">The pipeline.</param>
        /// <param name="channelId">The channel id.</param>
        /// <param name="description"></param>
        /// <param name="partitions"></param>
        /// <param name="boundaryLoggingEnabled"></param>
        /// <param name="resourceProfiles"></param>
        /// <param name="internalOnly"></param>
        /// <param name="assign"></param>
        /// <param name="autosetPartition01">This method automatically sets the default priority 0 and 1 partitions for the channel.</param>
        /// <returns>The original pipeline.</returns>
        public static IPipelineChannelBroadcast <P> AddChannelBroadcast <P>(this P pipeline
                                                                            , string channelId
                                                                            , string description = null
                                                                            , IEnumerable <ListenerPartitionConfig> partitionsListener = null
                                                                            , IEnumerable <SenderPartitionConfig> partitionsSender     = null
                                                                            , bool?boundaryLoggingEnabled = null
                                                                            , IEnumerable <ResourceProfile> resourceProfiles = null
                                                                            , bool internalOnly = false
                                                                            , Action <IPipelineChannelBroadcast <P> > assign = null
                                                                            , bool autosetPartition2 = true
                                                                            )
            where P : IPipeline
        {
            var channelListener = pipeline.ToMicroservice().Communication.RegisterChannel(
                new Channel(channelId, ChannelDirection.Incoming, description, boundaryLoggingEnabled, internalOnly));

            var channelSender = pipeline.ToMicroservice().Communication.RegisterChannel(
                new Channel(channelId, ChannelDirection.Outgoing, description, boundaryLoggingEnabled, internalOnly));

            if (partitionsListener == null && autosetPartition2)
            {
                partitionsListener = ListenerPartitionConfig.Init(2);
            }

            if (partitionsSender == null && autosetPartition2)
            {
                partitionsSender = SenderPartitionConfig.Init(2);
            }

            channelListener.Partitions = partitionsListener?.ToList();
            channelSender.Partitions   = partitionsSender?.ToList();

            if (resourceProfiles != null)
            {
                channelListener.ResourceProfiles = resourceProfiles?.ToList();
            }

            var cpipe = new ChannelPipelineBroadcast <P>(pipeline, channelListener, channelSender);

            assign?.Invoke(cpipe);

            return(cpipe);
        }
コード例 #10
0
 /// <summary>
 /// This is the default constructor for the Azure service bus sender.
 /// </summary>
 public AzureSBEventHubSender() : base()
 {
     SenderPriorityPartitions = SenderPartitionConfig.Init(1).ToList();
 }
コード例 #11
0
        protected override AzureClientHolder <EventHubClient, EventData> ClientCreate(SenderPartitionConfig partition)
        {
            var client = base.ClientCreate(partition);

            client.MessagePack = PackEventSource;
            return(client);
        }
コード例 #12
0
        public static ChannelPipelineOutgoing AssignPriorityPartition(this ChannelPipelineOutgoing pipeline, params int[] init)
        {
            SenderPartitionConfig.Init(init).ForEach((p) => AddPriorityPartition <SenderPartitionConfig>(pipeline, p));

            return(pipeline);
        }
コード例 #13
0
        /// <summary>
        /// This override sets the transmit options for the client.
        /// </summary>
        /// <returns>Returns the client.</returns>
        protected override AzureClientHolder <QueueClient, Microsoft.Azure.ServiceBus.Message> ClientCreate(SenderPartitionConfig partition)
        {
            var client = base.ClientCreate(partition);

            client.Type = "Queue Sender";
            client.Name = mPriorityClientNamer(EntityName ?? ChannelId, partition.Priority);

            client.AssignMessageHelpers();

            //client.FabricInitialize = () => Connection.QueueFabricInitialize(client.Name);

            //Set the method that creates the client.
            client.ClientCreate = () =>
            {
                return(new QueueClient(Connection.Connection.ToString(), client.Name, Connection.DefaultReceiveMode, Connection.DefaultRetryPolicy));
            };

            //We have to do this due to the stupid inheritance rules for Azure Service Bus.
            client.MessageTransmit = async(b) => await client.Client.SendAsync(b);

            return(client);
        }
コード例 #14
0
        protected override AzureClientHolder <TopicClient, BrokeredMessage> ClientCreate(SenderPartitionConfig partition)
        {
            var client = base.ClientCreate(partition);

            client.Type = "Topic Sender";

            client.Name = mPriorityClientNamer(AzureConn.ConnectionName, partition.Priority);

            client.AssignMessageHelpers();

            client.FabricInitialize = () => AzureConn.TopicFabricInitialize(client.Name);

            client.ClientCreate = () => TopicClient.CreateFromConnectionString(AzureConn.ConnectionString, client.Name);

            client.MessageTransmit = async(b) => await client.Client.SendAsync(b);

            return(client);
        }
コード例 #15
0
        //Outgoing
        public static ChannelPipelineOutgoing AssignPriorityPartition(this ChannelPipelineOutgoing pipeline, SenderPartitionConfig config)
        {
            AddPriorityPartition <SenderPartitionConfig>(pipeline, config);

            return(pipeline);
        }
コード例 #16
0
        /// <summary>
        /// This is the default client create logic.
        /// </summary>
        /// <param name="partition">The specific partition to create the client.</param>
        /// <returns>
        /// Returns the client.
        /// </returns>
        protected override AzureClientHolder <TopicClient, Microsoft.Azure.ServiceBus.Message> ClientCreate(SenderPartitionConfig partition)
        {
            var client = base.ClientCreate(partition);

            client.Type = "Topic Sender";

            client.Name = mPriorityClientNamer(EntityName ?? ChannelId, partition.Priority);

            client.AssignMessageHelpers();

            //client.FabricInitialize = () => Connection.TopicFabricInitialize(client.Name);

            //client.ClientCreate = () => TopicClient.CreateFromConnectionString(Connection.ConnectionString, client.Name);

            client.MessageTransmit = async(b) => await client.Client.SendAsync(b);

            return(client);
        }
コード例 #17
0
        /// <summary>
        /// This override sets the transmit options for the client.
        /// </summary>
        /// <returns>Returns the client.</returns>
        protected override AzureClientHolder <QueueClient, BrokeredMessage> ClientCreate(SenderPartitionConfig partition)
        {
            var client = base.ClientCreate(partition);

            client.Type = "Queue Sender";
            client.Name = mPriorityClientNamer(AzureConn.ConnectionName, partition.Priority);

            client.AssignMessageHelpers();

            client.FabricInitialize = () => AzureConn.QueueFabricInitialize(client.Name);

            //Set the method that creates the client.
            client.ClientCreate = () => QueueClient.CreateFromConnectionString(AzureConn.ConnectionString, client.Name);

            //We have to do this due to the stupid inheritance rules for Azure Service Bus.
            client.MessageTransmit = async(b) => await client.Client.SendAsync(b);

            return(client);
        }