Exemplo n.º 1
0
        /// <summary>
        /// 发布消息,
        /// XADD mystream MAXLEN ~ 1000 *
        /// </summary>
        /// <param name="topic"></param>
        /// <param name="fields"></param>
        /// <param name="id"></param>
        /// <param name="maxLen"></param>
        /// <returns></returns>
        public RedisID Publish(string topic, IEnumerable <RedisField> fields, string id = "*", int maxLen = -1)
        {
            List <string> @params = new List <string>();

            @params.Add(topic);
            if (maxLen > 0)
            {
                @params.Add("MAXLEN");
                @params.Add("~");
                @params.Add(maxLen.ToString());
            }
            if (string.IsNullOrEmpty(id))
            {
                @params.Add("*");
            }
            else
            {
                @params.Add(id);
            }

            foreach (var item in fields)
            {
                @params.Add(item.Field);
                @params.Add(item.String);
            }

            var responseData = RedisConnection.DoWithMutiParams(RequestType.XADD, @params.ToArray());

            if (responseData == null)
            {
                throw new Exception("Time out");
            }

            if (responseData.Type == ResponseType.Error)
            {
                throw new Exception(responseData.Data);
            }
            return(RedisID.Parse(responseData.Data.Trim()));
        }
Exemplo n.º 2
0
        /// <summary>
        /// Subscribe,
        /// XREADGROUP GROUP group consumer [COUNT count][BLOCK milliseconds] [NOACK] STREAMS key [key ...]ID [ID ...]
        /// </summary>
        /// <param name="groupName"></param>
        /// <param name="consumerName"></param>
        /// <param name="topicName"></param>
        /// <param name="redisId"></param>
        /// <param name="noAck"></param>
        /// <param name="count"></param>
        /// <param name="blocked"></param>
        /// <param name="timeout"></param>
        /// <returns></returns>
        public IEnumerable <StreamEntry> Subscribe(string groupName, string consumerName, string topicName, RedisID redisId, bool noAck = false, int count = 1, bool blocked = false, int timeout = 1000)
        {
            List <string> @params = new List <string>();

            @params.Add("GROUP");
            @params.Add(groupName);
            @params.Add(consumerName);

            @params.Add("COUNT");
            @params.Add(count.ToString());

            if (blocked)
            {
                @params.Add("BLOCK");
                @params.Add(timeout.ToString());
            }

            if (noAck)
            {
                @params.Add("NOACK");
            }

            @params.Add("STREAMS");
            @params.Add(topicName);
            if (redisId != null)
            {
                @params.Add(redisId.ToString());
            }
            else
            {
                @params.Add(">");
            }

            var responseData = RedisConnection.DoStreamSub(RequestType.XREADGROUP, @params.ToArray());

            if (responseData == null)
            {
                throw new Exception("Time out");
            }

            if (responseData.Type == ResponseType.Error)
            {
                throw new Exception(responseData.Data);
            }

            return(responseData.Entity);
        }
Exemplo n.º 3
0
 /// <summary>
 /// 返回范围内的消息信息
 /// </summary>
 /// <param name="topic"></param>
 /// <param name="from"></param>
 /// <param name="to"></param>
 /// <param name="count"></param>
 /// <returns></returns>
 public IEnumerable <IdFiled> GetRange(string topic, RedisID from, RedisID to, int count = -1)
 {
     return(GetRange(topic, from.ToString(), to.ToString(), count));
 }