Springboot NexusClient and NexusServiceClient<T> support for easier, correct SANO usage

Aberta
#3,122 4 comentários 1 reação 1 responsável Ver no GitHub

Mantenedores costumam responder em até 2 dias

@Quinn-With-Two-Ns já está trabalhando nisso.

Desde 23/10/2026.

  • #3158 de @Quinn-With-Two-Ns — aberto

Avaliação

Dificuldade
5/5
Tempo estimado
Mais de uma semana
Facilidade para iniciantes
35/100
Tipo de issue
Funcionalidade
Clareza
Razoavelmente clara
Status de atividade
Ativa
Stack de tecnologia
java, spring-boot
Domínio
backend

Direção de pesquisa

Start with the Spring Boot autoconfiguration and multiple-namespace support referenced in the issue, then trace how workflow clients are configured and exposed as beans. Determine how NexusClient and NexusServiceClient<T> should fit that configuration, including non-root namespaces; done means the requested client types can be injected with the described aliases and service configuration.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

enhancement

Is your feature request related to a problem? Please describe.
Guidance in javadoc for NexusClient is Client for managing standalone Nexus operation executions. Obtain an instance via newInstance(WorkflowServiceStubs) or newInstance(WorkflowServiceStubs, NexusClientOptions). Do not create this object per request; share it for the lifetime of the process.
[here])https://www.javadoc.io/doc/io.temporal/temporal-sdk/latest/io/temporal/client/NexusClient.html).

Describe the solution you'd like

First improvement

Lifestyle correctness guidance like that should be made simpler with Spring so I can nexusClient in my controller just like I can workflowClient.
We should support this across all namespaces though using the nice "non-root" namespace config support. It is Nexus, after all, so let me call across Namespaces :) .

spring.temporal:
  namespaces:
    # I have a couple services inside my `apps` Namespace I want to use
    - namespace: apps
      alias: apps
      nexus-service-clients:
        - alias: apps-v1 
          endpoint: oms-apps-v1
          service: com.acme.oms.services.AppsService
        - alias: support-v1
          endpoint: oms-support-v1
          service: com.acme.oms.services.SupportService
// my REST Controller
// Use @Qualifier since non-root referencing alias
public AppsController(@Qualifier("apps-v1NexusClient") NexusClient appsNexusClient) {
    this.appsNC = appsNexusClient;
  }

ref: https://github.com/temporalio/sdk-java/tree/main/temporal-spring-boot-autoconfigure#running-multiple-name-space-experimental

Customization for options (interceptors,dataconverter, etc) can follow the existing path for doing such things with workflow client...ideally we could do this in configuration directly but the requirement to code those a shortcoming that already exists in our SB integration so not necessarily part of this.

Second improvement

We can do better than this though I think and support a nexus-service-clients per client so I can do something like :

spring.temporal:
  namespaces:
    # I have a couple services inside my `apps` Namespace I want to use
    - namespace: apps
      alias: apps
      nexus-service-clients:
        - alias: apps-v1 
          endpoint: oms-apps-v1
          service: com.acme.oms.services.AppsService
        - alias: support-v1
          endpoint: oms-support-v1
          service: com.acme.oms.services.SupportService
// my REST Controller
// No @Qualifier needed but I could do it with `alias` I guess
public SupportController(NexusServiceClient<SupportService> supportSvc) {
    this.supportSvc = supportSvc;
  }

Describe alternatives you've considered
Roll my own @Bean but I want it to be more approachable!

Additional context
SANO is here, let's make it dead simple to integrate All The Things!

Linguagem predominante
Java
Estrelas
441
Forks
266
Merge médio
5d 21h
PRs com merge (30d)
19

Preparar o ambiente

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de temporalio/sdk-java

Todas as issues de temporalio/sdk-java

Issues semelhantes

Mais issues de Java

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.