public void I_should_be_able_to_split_the_group_into_individual_messages_and_handle_each_one_on_its_own() { IServiceBus bus = MockRepository.GenerateMock <IServiceBus>(); PingMessage ping = new PingMessage(); PongMessage pong = new PongMessage(); MessageGroup group = MessageGroup.Build <MessageGroup>() .Add(ping) .Add(pong); bus.Expect(x => x.Publish(ping)); bus.Expect(x => x.Publish(pong)); group.Split(bus); bus.VerifyAllExpectations(); }
/// <summary>发送消息。如果有响应,可在消息到达事件<see cref="OnReceived"/>中获得。这里会实现大消息分包。</summary> /// <param name="message"></param> public virtual void Send(Message message) { var ms = message.GetStream(); WriteLog("发送消息 [{0}] {1}", ms.Length, message); if (MaxMessageSize <= 0 || ms.Length < MaxMessageSize) OnSend(ms); else { var mg = new MessageGroup(); mg.Split(ms, MaxMessageSize, message.Header); var count = 0; foreach (var item in mg) { if (item.Index == 1) count = item.Count; ms = item.GetStream(); WriteLog("发送分组 Identity={0} {1}/{2} [{3}] [{4}]", item.Identity, item.Index, count, item.Data == null ? 0 : item.Data.Length, ms.Length); Debug.Assert(item.Index == count || ms.Length == MaxMessageSize, "分拆的组消息大小不合适!"); OnSend(ms); } } }