Java 当前一个发布服务器失败或损坏时,如何切换到新发布服务器?

Java 当前一个发布服务器失败或损坏时,如何切换到新发布服务器?,java,spring-webflux,project-reactor,Java,Spring Webflux,Project Reactor,假设有三个实体: Mono供应商-供应商价值来源出版商 价值来源-价值发布者 值(其性质不重要,即字符串) 目的是: 从供应商处获取下一个来源 创建从源检索值的发布服务器 对于每个响应,返回当前值 如果当前源无法生成下一个值(抛出错误或返回Mono.error),请转至步骤(1) 当上一个值源失败时,切换到新值源的正确方法是什么? 类值服务{ 私人价值来源; 私人独资企业; NumberGeneratorsServiceImpl(供应商来源供应商){ var currentSource=s

假设有三个实体:

  • Mono供应商
    -供应商价值来源出版商
  • 价值来源
    -价值发布者
  • 值(其性质不重要,即
    字符串
目的是:

  • 从供应商处获取下一个来源
  • 创建从源检索值的发布服务器
  • 对于每个响应,返回当前值
  • 如果当前源无法生成下一个值(抛出错误或返回Mono.error),请转至步骤(1)
  • 当上一个
    值源失败时,切换到新
    值源的正确方法是什么?


    类值服务{
    私人价值来源;
    私人独资企业;
    NumberGeneratorsServiceImpl(供应商来源供应商){
    var currentSource=sourcesApplication.get();
    this.valuesPublisher=Mono.defer(()->source.flatMap(s->s.makeNextValue());
    }
    @凌驾
    公共Mono nextValue(){
    //如何检测publisher是否未能发布值
    //并使用SourcesApplication.get()中的新源创建一个新的发布服务器
    返回值spublisher;
    }
    }
    
    很难准确地说出您想要做什么,但如果我理解正确,并且您希望从供应商处获得,您可以使用

    将ValueSource替换为String,因为问题中不清楚您想用它做什么,但它不会影响逻辑

    class ValuesService{
    
        private Mono<String> valuesPublisher;
    
        ValuesService(Supplier<Mono<String>> sourcesSupplier) {
    
            this.valuesPublisher =
                    //Every subscription calls get on supplier
                    Mono.defer(sourcesSupplier)
                            //Retry when error, resubsribes each time
                            .retry();
        }
    
        Mono<String> getValuesPublisher(){
            return valuesPublisher;
    
        }
    }
    
    类值服务{
    私人独资企业;
    价值服务(供应商来源供应商){
    这是我的价值观=
    //每次订购电话都会打到供应商身上
    Mono.defer(sourcesSupplier)
    //出现错误时重试,每次重新订阅
    .重试();
    }
    Mono getValuesPublisher(){
    返回值spublisher;
    }
    }
    
    什么是
    ValueSource
    ?为什么默认构造函数的名称与类不同?currentSource在哪里使用?这在目前没有多大意义(至少对我来说)。你能发布一个导致你想要恢复的错误的消息吗?
    class ValuesService{
    
        private Mono<String> valuesPublisher;
    
        ValuesService(Supplier<Mono<String>> sourcesSupplier) {
    
            this.valuesPublisher =
                    //Every subscription calls get on supplier
                    Mono.defer(sourcesSupplier)
                            //Retry when error, resubsribes each time
                            .retry();
        }
    
        Mono<String> getValuesPublisher(){
            return valuesPublisher;
    
        }
    }