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 }); }
public static extern int SendMessageOrderly( HandleRef producer, HandleRef message, [MarshalAs(UnmanagedType.FunctionPtr)] QueueSelectorCallback callback, IntPtr arg, int autoRetryTimes, [Out] out CSendResult result );
/// <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); }