Ejemplo n.º 1
0
        static void Main(string[] args)
        {
            var settings = new MqConnectionSettings
            {
                QueueManagerName = args[0],
                ChannelName      = args[1],
                Host             = args[2],
                Port             = int.Parse(args[3]),
                EnableSSL        = int.Parse(args[4]) > 0
            };
            var traceDirectory = MqTracing.GetTraceDirectory();

            //traceDirectory.Empty();

            try
            {
                Console.WriteLine(MqClient.TestConnection(settings));
                Console.WriteLine("Press any key to close app...");
            }
            catch (Exception e)
            {
                Console.WriteLine($"Error: {e.Message};{e.InnerException?.Message}");
                //Thread.Sleep(5000);//white until trace updated
                //MqTracing.DisplayTrace(traceDirectory);
            }
        }
Ejemplo n.º 2
0
 /// <summary>
 /// Создает экземпляр класса <see cref="RouteInfo"/>.
 /// </summary>
 public RouteInfo(
     string exchange,
     string exchangeType,
     IDictionary <string, object> arguments,
     bool durable,
     bool autoDelete,
     string route,
     int retryCount,
     string messageName,
     string messageVersion,
     MqConnectionSettings connectionSettings,
     TimeSpan?delay,
     bool usePublisherConfirms
     )
 {
     Name                 = messageName;
     Exchange             = exchange;
     Durable              = durable;
     AutoDelete           = autoDelete;
     Route                = route;
     RetryCount           = retryCount;
     MessageVersion       = messageVersion;
     ConnectionSettings   = connectionSettings;
     ExchangeType         = exchangeType;
     Arguments            = arguments;
     Delay                = delay;
     UsePublisherConfirms = usePublisherConfirms;
 }
Ejemplo n.º 3
0
        public static string TestConnection(MqConnectionSettings mqConnectionSettings)
        {
            var queueManager = MqManagerFactory.Create(mqConnectionSettings);
            var response     = queueManager.IsConnected
                ? "Connected Successfully"
                : "Problem accesing WebSphere MQ";

            queueManager.Disconnect();
            return(response);
        }
Ejemplo n.º 4
0
        public static IEnumerable <string> GetAllMessages(MqConnectionSettings mqConnectionSettings, string queueName, bool browse)
        {
            string messageContent;
            var    count = 0;

            do
            {
                messageContent = GetMessage(mqConnectionSettings, queueName, browse, count == 0);
                count++;
                yield return(messageContent);
            } while (messageContent != string.Empty);
        }
Ejemplo n.º 5
0
 public MessageSettings Create(MqConnectionSettings mqConnectionSettings)
 {
     return(new MessageSettings(
                mqConnectionSettings,
                Name,
                Version,
                Route,
                Arguments,
                Exchange?.Create(),
                RetryCount,
                UsePublisherConfirms
                ));
 }
Ejemplo n.º 6
0
 /// <summary>
 /// Получить свойства клиента.
 /// </summary>
 /// <param name="connectionSettings">Настройки подключения.</param>
 /// <returns>Словарь свойств клиента.</returns>
 public IDictionary <string, object?> GetClientProperties(MqConnectionSettings connectionSettings)
 {
     return(new Dictionary <string, object?>
     {
         ["product"] = _serviceInfoAccessor.ServiceInfo.ServiceName,
         ["version"] = _serviceInfoAccessor.ServiceInfo.ApplicationVersion,
         ["OS"] = RuntimeInformation.OSDescription + " " + RuntimeInformation.OSArchitecture,
         ["platform"] = "Process architecture: " +
                        RuntimeInformation.ProcessArchitecture + " " +
                        RuntimeInformation.FrameworkDescription,
         ["host_name"] = _serviceInfoAccessor.ServiceInfo.HostName,
         ["username"] = connectionSettings.UserName,
     });
 }
Ejemplo n.º 7
0
        public static MQQueueManager Create(MqConnectionSettings mqConnectionSettings)
        {
            var properties = new Hashtable
            {
                { MQC.HOST_NAME_PROPERTY, mqConnectionSettings.Host },
                { MQC.PORT_PROPERTY, mqConnectionSettings.Port },
                { MQC.CHANNEL_PROPERTY, mqConnectionSettings.ChannelName },
                { MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_MANAGED }
            };

            if (mqConnectionSettings.EnableSSL)
            {
                SetupSsl(properties);
            }
            return(new MQQueueManager(mqConnectionSettings.QueueManagerName, properties));
        }
Ejemplo n.º 8
0
 /// <summary>
 /// Создает новый экземпляр класса <see cref="MessageSettings"/>.
 /// </summary>
 /// <param name="connectionSettings">Настройки подключения.</param>
 /// <param name="name">Наименование сообщения.</param>
 /// <param name="version">
 /// Версия сообщения.
 /// <para>
 /// По-умолчанию: 1.0.
 /// </para>
 /// </param>
 /// <param name="route">Роут для публикации.</param>
 /// <param name="arguments">Аргументы.</param>
 /// <param name="exchange">
 /// Обменник, в который необходимо сообщение опубликовать.
 /// </param>
 /// <param name="retryCount">
 /// Количество пыток отправки сообщения.
 /// <para>
 /// По-умолчанию: 5.
 /// </para>
 /// </param>
 /// <param name="UsePublisherConfirms">
 /// Включно ли подтверждение публикаций сообщений брокером.
 /// </param>
 public MessageSettings(
     MqConnectionSettings connectionSettings,
     string name,
     string?version = null,
     string?route   = null,
     IDictionary <string, object>?arguments = null,
     ExchangeInfo?exchange     = null,
     int?retryCount            = null,
     bool?UsePublisherConfirms = null
     )
 {
     Name                 = name ?? throw new ArgumentNullException(nameof(name));
     Version              = version ?? "1.0";
     Route                = route ?? string.Empty; // TODO: сделать проверки параметров в зависимости от типа обменника.
     Arguments            = arguments ?? new Dictionary <string, object>();
     Exchange             = exchange ?? new ExchangeInfo();
     RetryCount           = retryCount ?? 5;
     ConnectionSettings   = connectionSettings;
     UsePublisherConfirms = UsePublisherConfirms ?? false;
 }
Ejemplo n.º 9
0
        public static string GetMessage(MqConnectionSettings mqConnectionSettings, string queueName, bool browse, bool firstMessage = true)
        {
            var queueManager   = MqManagerFactory.Create(mqConnectionSettings);
            var mqQueue        = GetMqQueue(queueName, browse, queueManager);
            var messageContent = string.Empty;

            try
            {
                var mqMsg = MqUploader.CreateNewMqMessage();
                messageContent = mqQueue.GetMessageContent(mqMsg, browse, firstMessage);
                mqMsg.ClearMessage();
                queueManager.Commit();
            }
            catch (Exception)
            {
                queueManager.Disconnect();
                mqQueue?.Close();
            }
            return(messageContent);
        }
Ejemplo n.º 10
0
 public SubscriberSettings Create(MqConnectionSettings mqConnectionSettings)
 {
     return(new SubscriberSettings(
                mqConnectionSettings,
                SubscriberName,
                QueueName,
                (Bindings ?? Enumerable.Empty <ExchangeBindingDto>()).Select(b => b.Create()),
                Arguments,
                UseModelTypeAsSuffix,
                ConsumerName,
                Durable,
                Exclusive,
                AutoDelete,
                AutoAck,
                UseDeadLetter,
                UsePublisherConfirms,
                TracingSettings?.Create(),
                RetrySettings?.Create(),
                ScalingSettings?.Create()
                ));
 }
Ejemplo n.º 11
0
        private const int MqEncoding = MQC.CODESET_819; // "iso-8859-1"

        public static string SendMessage(MqConnectionSettings mqConnectionSettings, string queueName, string message)
        {
            var queueManager = MqManagerFactory.Create(mqConnectionSettings);

            var queue = queueManager.AccessQueue(queueName, MQC.MQOO_OUTPUT + MQC.MQOO_FAIL_IF_QUIESCING);


            var queueMessage           = CreateNewMqMessage();
            var queuePutMessageOptions = new MQPutMessageOptions();

            AddMessageContent(message, queueMessage);

            queue.Put(queueMessage, queuePutMessageOptions);
            queue.Close();
            queueManager.Commit();
            queueManager.Disconnect();

            var msgId = Convert.ToBase64String(queueMessage.MessageId ?? new byte[0]);

            return(msgId);
        }
Ejemplo n.º 12
0
 /// <summary>
 /// Создает экземпляр класса <see cref="SubscriberSettings"/>.
 /// </summary>
 /// <param name="subscriberName">Наименование подписчика.</param>
 /// <param name="queueName">Название очереди.</param>
 /// <param name="bindings">Подписки очереди на обменники.</param>
 /// <param name="arguments">Дополнительные аргументы очереди.</param>
 /// <param name="useModelTypeAsSuffix">
 /// Добавлять тип модели в виде суффикса в имя очереди.
 /// <para>
 /// По-умолчанию: false.
 /// </para>
 /// </param>
 /// <param name="consumerName">
 /// Наименование подписчика в ConsumerTag.
 /// <para>
 /// По-умолчанию: наименование секции в конфигурации.
 /// </para>
 /// </param>
 /// <param name="durable">
 /// Очередь автоматически восстанавливается при перезапуске брокера сообщений.
 /// <para>
 /// По-умолчанию: true.
 /// </para>
 /// </param>
 /// <param name="exclusive">
 /// У очереди может быть только один потребитель и она удаляется при закрытии соединения с ним.
 /// <para>
 /// По-умолчанию: false.
 /// </para>
 /// </param>
 /// <param name="autoDelete">
 /// Очередь автоматически удаляется, если у нее не остается потребителей.
 /// <para>
 /// По-умолчанию: false.
 /// </para>
 /// </param>
 /// <param name="autoAck">
 /// Авто-подтверждение при потреблении сообщения.
 /// <para>
 /// По-умолчанию: false.
 /// </para>
 /// </param>
 /// <param name="useDeadLetter">
 /// Использовать отдельную очередь для хранения сообщений при обработке которых возникла ошибка.
 /// <para>
 /// По-умолчанию: false.
 /// </para>
 /// </param>
 /// <param name="usePublisherConfirms">
 /// Включно ли подтверждение публикаций сообщений брокером.
 /// </param>
 /// <param name="tracingSettings">Настройки отслеживания сообщений.</param>
 /// <param name="retrySettings">Настройки повторной обработки сообщений.</param>
 /// <param name="scalingSettings">Настройки масштабирования подписчика.</param>
 /// <param name="connectionSettings">Настройки подключения, используемые данной очередью.</param>
 public SubscriberSettings(
     MqConnectionSettings connectionSettings,
     string?subscriberName,
     string?queueName,
     IEnumerable <ExchangeBinding>?bindings = null,
     IDictionary <string, object>?arguments = null,
     bool?useModelTypeAsSuffix = null,
     string?consumerName       = null,
     bool?durable                    = null,
     bool?exclusive                  = null,
     bool?autoDelete                 = null,
     bool?autoAck                    = null,
     bool?useDeadLetter              = null,
     bool?usePublisherConfirms       = null,
     TracingSettings?tracingSettings = null,
     RetrySettings?retrySettings     = null,
     ScalingSettings?scalingSettings = null
     )
 {
     SubscriberName       = subscriberName;
     QueueName            = queueName;
     Arguments            = arguments ?? new Dictionary <string, object>();
     UseModelTypeAsSuffix = useModelTypeAsSuffix ?? false;
     ConsumerName         = consumerName;
     Durable              = durable ?? true;
     Exclusive            = exclusive ?? false;
     AutoDelete           = autoDelete ?? false;
     AutoAck              = autoAck ?? false;
     UseDeadLetter        = useDeadLetter ?? false;
     UsePublisherConfirms = usePublisherConfirms ?? false;
     TracingSettings      = tracingSettings ?? new TracingSettings();
     RetrySettings        = retrySettings ?? new RetrySettings();
     ScalingSettings      = scalingSettings ?? new ScalingSettings();
     ConnectionSettings   = connectionSettings;
     _bindings            = new HashSet <ExchangeBinding>(bindings ?? Enumerable.Empty <ExchangeBinding>());
 }
Ejemplo n.º 13
0
 public static string GetMessage(MqConnectionSettings mqConnectionSettings, string queueName,
                                 bool browse)
 {
     return(MqDownloader.GetMessage(mqConnectionSettings, queueName, browse));
 }
Ejemplo n.º 14
0
 public static IEnumerable <string> GetAllMessages(MqConnectionSettings mqConnectionSettings, string queueName,
                                                   bool browse)
 {
     return(MqDownloader.GetAllMessages(mqConnectionSettings, queueName, browse));
 }
Ejemplo n.º 15
0
 public static string SendMessage(MqConnectionSettings mqConnectionSettings, string queueName,
                                  string messageContent)
 {
     return(MqUploader.SendMessage(mqConnectionSettings, queueName, messageContent));
 }