sentinel 作用于消息中间键

中间键安装

  • 中间键选择的是rabbitmq
  • macos 直接brew install rabbitmq 既可以

直接上代码

生产者

一次性发出30个消息

    public void send() {
        for (int i=0; i < 30; i++){
            String context = "hello--- " +i;
            System.out.println("Sender : " + context);
            this.rabbitTemplate.convertAndSend("hello", context);
        }

消费者

单线程消费配置

    @Bean("customContainerFactory")
    public SimpleRabbitListenerContainerFactory containerFactory(SimpleRabbitListenerContainerFactoryConfigurer configurer, ConnectionFactory connectionFactory) {
        SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
        factory.setConcurrentConsumers(1);  //设置线程数
        factory.setMaxConcurrentConsumers(20); //最大线程数
        configurer.configure(factory, connectionFactory);
        return factory;
    }

sentinel控制流量consume

 @RabbitHandler
    public void process(String hello) {
        Entry entry = null;
        // 1.5.0 版本开始可以直接利用 try-with-resources 特性
        try {
            entry = SphU.entry("hello");
            System.out.println("Receiver  : threadId-" + Thread.currentThread().getId() + "---" + hello);
        } catch (BlockException ex) {
            // 处理被流控的逻辑
            System.out.println(hello + "---blocked---threadId-" + Thread.currentThread().getId());
        } finally {
            if (entry != null) {
                entry.exit();
            }
        }
    }

日志输出


Sender : hello--- 0
Sender : hello--- 1
Sender : hello--- 2
Sender : hello--- 3
Sender : hello--- 4
Sender : hello--- 5
Sender : hello--- 6
Sender : hello--- 7
Sender : hello--- 8
Sender : hello--- 9
Sender : hello--- 10
Sender : hello--- 11
Sender : hello--- 12
Sender : hello--- 13
Sender : hello--- 14
Sender : hello--- 15
Sender : hello--- 16
Sender : hello--- 17
Sender : hello--- 18
Sender : hello--- 19
Sender : hello--- 20
Sender : hello--- 21
Sender : hello--- 22
Sender : hello--- 23
Sender : hello--- 24
Sender : hello--- 25
Sender : hello--- 26
Sender : hello--- 27
Sender : hello--- 28
Sender : hello--- 29
Receiver  : threadId-19---hello--- 0
hello--- 1---blocked---threadId-19
hello--- 2---blocked---threadId-19
hello--- 3---blocked---threadId-19
hello--- 4---blocked---threadId-19
hello--- 5---blocked---threadId-19
hello--- 6---blocked---threadId-19
hello--- 7---blocked---threadId-19
hello--- 8---blocked---threadId-19
hello--- 9---blocked---threadId-19
hello--- 10---blocked---threadId-19
hello--- 11---blocked---threadId-19
hello--- 12---blocked---threadId-19
hello--- 13---blocked---threadId-19
hello--- 14---blocked---threadId-19
hello--- 15---blocked---threadId-19
hello--- 16---blocked---threadId-19
hello--- 17---blocked---threadId-19
hello--- 18---blocked---threadId-19
hello--- 19---blocked---threadId-19
hello--- 20---blocked---threadId-19
hello--- 21---blocked---threadId-19
hello--- 22---blocked---threadId-19
hello--- 23---blocked---threadId-19
hello--- 24---blocked---threadId-19
hello--- 25---blocked---threadId-19
hello--- 26---blocked---threadId-19
hello--- 27---blocked---threadId-19
hello--- 28---blocked---threadId-19
hello--- 29---blocked---threadId-19

可以看到明显收到了限制

集群消费限制 todo

你可能感兴趣的:(sentinel 作用于消息中间键)