多对多使用

一个发送者,N 个接收者或者 N 个发送者和 N 个接收者会出现什么情况呢?

1、一对多发送

对上面的代码进行了小改造,接收端注册了两个 Receiver,Receiver1 和 Receiver2,发送端加入参数计数,接收端打印接收到的参数,下面是测试代码,发送一百条消息,来观察两个接收端的执行效果:

@Test
public void oneToMany() throws Exception {
    for (int i=0;i<100;i++){
        neoSender.send(i);
    }
}

结果如下:

Receiver 1: Spring boot neo queue ****** 11
Receiver 2: Spring boot neo queue ****** 12
Receiver 2: Spring boot neo queue ****** 14
Receiver 1: Spring boot neo queue ****** 13
Receiver 2: Spring boot neo queue ****** 15
Receiver 1: Spring boot neo queue ****** 16
Receiver 1: Spring boot neo queue ****** 18
Receiver 2: Spring boot neo queue ****** 17
Receiver 2: Spring boot neo queue ****** 19
Receiver 1: Spring boot neo queue ****** 20

根据返回结果得到以下结论:

一个发送者,N个接受者,经过测试会均匀的将消息发送到N个接收者中。

2、多对多发送

复制了一份发送者,加入标记,在一百个循环中相互交替发送:

@Test
public void manyToMany() throws Exception {
    for (int i=0;i<100;i++){
        neoSender.send(i);
        neoSender2.send(i);
    }
}

结果如下:

Receiver 1: Spring boot neo queue ****** 20
Receiver 2: Spring boot neo queue ****** 20
Receiver 1: Spring boot neo queue ****** 21
Receiver 2: Spring boot neo queue ****** 21
Receiver 1: Spring boot neo queue ****** 22
Receiver 2: Spring boot neo queue ****** 22
Receiver 1: Spring boot neo queue ****** 23
Receiver 2: Spring boot neo queue ****** 23
Receiver 1: Spring boot neo queue ****** 24
Receiver 2: Spring boot neo queue ****** 24
Receiver 1: Spring boot neo queue ****** 25
Receiver 2: Spring boot neo queue ****** 25

结论:和一对多一样,接收端仍然会均匀接收到消息。

作者:Jeebiz  创建时间:2023-03-30 12:00
最后编辑:Jeebiz  更新时间:2024-09-23 10:03