Exemple #1
0
        public SendResult SendMessageOrderly(
            MessageBuilder messageBuilder,
            QueueSelectorCallback callback,
            string arg,
            int autoRetryTimes
            )
        {
            if (autoRetryTimes < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(autoRetryTimes));
            }

            var pCallback = new ProducerNativeMethodsDelegate.CQueueSelectorCallback((size, message, args) => {
                return(callback(
                           size,
                           message == IntPtr.Zero ? string.Empty : Marshal.PtrToStringAnsi(message),
                           args == IntPtr.Zero ? string.Empty : Marshal.PtrToStringAnsi(args)
                           ));
            });
            var code = this._functionLoader.LoadFunction <ProducerNativeMethodsDelegate.SendMessageOrderly>(nameof(SendMessageOrderly))(
                this._producerHandle,
                messageBuilder.Build(),
                pCallback,
                Marshal.StringToBSTR(arg ?? string.Empty),
                autoRetryTimes,
                out var result
                );

            return(new SendResult {
                ReturnCode = code,
                SendStatus = result.sendStatus,
                MsgId = result.msgId,
                Offset = result.offset
            });
        }
Exemple #2
0
 public static extern int SendMessageOrderly(
     HandleRef producer,
     HandleRef message,
     [MarshalAs(UnmanagedType.FunctionPtr)]
     QueueSelectorCallback callback,
     IntPtr arg,
     int autoRetryTimes,
     [Out]
     out CSendResult result
     );
Exemple #3
0
        /// <summary>
        /// 顺序消息发送
        /// </summary>
        /// <param name="builder"></param>
        /// <param name="callback"></param>
        /// <param name="autoRetryTimes"></param>
        /// <param name="args"></param>
        /// <returns></returns>
        public SendResult SendMessageOrderly(HandleRef message, QueueSelectorCallback callback, string args = "")
        {
            if (message.Handle == IntPtr.Zero)
            {
                throw new ArgumentException(nameof(message));
            }

            var argsPtr = Marshal.StringToBSTR(args);
            var result  = ProducerWrap.SendMessageOrderly(this._handleRef, message, callback, argsPtr, this.autoRetryTimes, out var sendResult);

            return(result == 0
                ? new SendResult
            {
                SendStatus = sendResult.sendStatus,
                Offset = sendResult.offset,
                MessageId = sendResult.msgId
            }
                : null);
        }