Java-Chassis2.8分支的ServicePathManager初始化流程的健壮性不足
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 5/5
- Tempo estimado
- Mais de uma semana
- Facilidade para iniciantes
- 25/100
- Tipo de issue
- Bug
- Clareza
- Razoavelmente clara
- Status de atividade
- Estagnada
- Stack de tecnologia
- java
- Domínio
- backend-api-design, distributed-systems
Direção de pesquisa
Comece rastreando RestEngineSchemaListener#onCreateMicroserviceVersion e a inicialização de MicroserviceVersion; depois, inspecione EdgeInvocation#edgeInvoke e SCBEngine#ensureStatusUp. Confirme quais caminhos de criação podem preceder o registro no EventBus. Está concluído quando cada MicroserviceVersion tiver seu ServicePathManager e o dispatcher de edge lidar com a verificação de status necessária.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
问题原理分析
Java-Chassis做微服务调用的时候, 要求能从 MicroserviceMeta 中取出 ServicePathManager 实例. 而将 ServicePathManager 设置进 MicroserviceMeta 的逻辑是在 RestEngineSchemaListener#onCreateMicroserviceVersion 方法中执行的. 这个监听器从 guava EventBus 监听 CreateMicroserviceVersionEvent 事件, 并创建 ServicePathManager 与对应的 MicroserviceVersion 关联起来.
RestEngineSchemaListener 是在BEFORE_REGISTRY事件阶段注册到 EventBus 的, 也就是说, 如果有MicroserviceVersion对象是在RestEngineSchemaListener注册到 EventBus 之前创建的, 则它无法触发 RestEngineSchemaListener 执行上述动作, 也就不会有对应的 ServicePathManager 对象. 而且, 这个问题是不可恢复的, 一旦MicroserviceVersion对象有这个问题, 除非重启, 否则它一直会保持有问题的状态, 导致consumer端一直调用不了对应的producer微服务.
例如, EdgeService场景下, EdgeInvocation#edgeInvoke 就会触发创建MicroserviceVersion对象, 这是有可能在 BEFORE_REGISTRY 事件之前触发的(它不在SCBEngine#ensureStatusUp的保护范围之内).
建议
- 能否取消
RestEngineSchemaListener, 目前它做的事情就是在MicroserviceVersion对象创建出来的时候, 创建一个ServicePathManager对象与之对应. 这个流程能否挪到MicroserviceVersion自身的初始化方法中? - edge Dispatcher中也应该做
SCBEngine#ensureStatusUp状态检查.
这两条都有价值做, 因为建议2无法完全拦截建议1涉及的场景.
- Linguagem predominante
- Java
- Estrelas
- 1.9k
- Forks
- 813
- Merge médio
- 8d 23h
- PRs com merge (30d)
- 1
Guia de contribuição
Nenhum guia de contribuição indexado para este repositório
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de apache/servicecomb-java-chassis
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 65/100
apache/servicecomb-java-chassis#5106 ·
-
question
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 35/100
apache/servicecomb-java-chassis#5153 · 1 comentário ·
-
[QUESTION] - 请发布3.x的最新版本 Abertaquestion
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 25/100
apache/servicecomb-java-chassis#5146 ·
-
[FEATURE] - When will ServiceComb support Spring Boot 4.x, Spring Framework 7.x, and Jackson 3.x? Abertaenhancement
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 25/100
apache/servicecomb-java-chassis#5145 ·
-
2.x bug
apache/servicecomb-java-chassis#5141 · 1 responsável ·
Todas as issues de apache/servicecomb-java-chassis
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 85/100
HL7/fhir-ig-publisher#1375 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 74/100
-
Flaky: a relaunched catch-up replay can still report catching up right after its marker is written Abertabug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
johanhaleby/occurrent#1134 ·
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
objectionary/jeo-maven-plugin#1811 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 88/100