【问题标题】:micronaut RxWebSocketClient how to dynamically connect to a client?micronaut RxWebSocketClient 如何动态连接客户端?
【发布时间】:2019-06-21 12:49:48
【问题描述】:

@Client("http://localhost:8082")我在提供的链接上的这段代码有以下声明:

/**
 * TODO this is currently hard wired to something that is dynamic in command object host/port
 */
@Inject
@Client("http://localhost:8082")
RxWebSocketClient webSocketClient;

下面还有一个segment of code

 ChatClientWebSocket chatClient = webSocketClient.connect(ChatClientWebSocket.class, "/ws/process").blockingFirst();
                    chatClient.send(serializeMessage(msg));

理想情况下,我想根据command object 中的现有数据定义哪个客户端:

 private String host;
    private int port;

在上面的类中,主机端口是由这个微服务本身生成的,为了测试目的是物理绑定的,但假设它动态出现在不同的端口127.0.0.1:8083127.0.0.1:8084等等动态主机端口怎么能声明顶部声明的内容,即

@Client("http://localhost:8082")

理想情况下,我需要做的是这样的事情 因此,客户端连接是基于当前对象主机端口定义的动态连接,而不是在页面顶部硬编码在动态发生位置之外..

                @Client(cmd.getHost()+":"+cmd.getPort())
                RxWebSocketClient webSocketClient;
                ChatClientWebSocket chatClient = webSocketClient.connect(ChatClientWebSocket.class, "/ws/process").blockingFirst();
                chatClient.send(serializeMessage(msg));

【问题讨论】:

  • “理想情况下,我想根据命令对象中的现有数据定义哪个客户端定义在代码中表示为 msg。” - 我不明白你的意思。您的代码中只有 1 个客户端,不清楚您的命令对象包含什么。
  • 我已经更新了问题,希望能更有意义

标签: micronaut


【解决方案1】:

你可以试试使用属性:

@Client("${myapp.api.twitter.url}")
RxWebSocketClient webSocketClient;

【讨论】:

  • 谢谢,我认为这仍然留下了我将如何为它分配动态变量的方式,该变量嵌套在代码中。稍微偏离主题,但仍然相关。这个概念发生了变化,我不再使用 github.com/vahidhedayati/micronaut-vuejs-cqrs/blob/master/… 类似的东西,另一个类传递 @Client 位,因为它在上面调用了上面的工作 github.com/vahidhedayati/micronaut-vuejs-cqrs/blob/master/…
  • 我认为没有动态客户端,使用不同的客户端......如果我明白你的意思
  • 在我的情况下是肯定的 - 我本来打算回到它并找到一种更简单的方法,我认为 guides.micronaut.io/micronaut-http-client/guide/index.html 在第 4 节公共 BintrayLowLevelClient(@Client(BintrayConfiguration.BINTRAY_API_URL) RxHttpClient httpClient 下,可能是 public BintrayLowLevelClient(RxHttpClient httpClient, 或者扩展类或另一个类调用将调用该方法并为 @Client 位提供它传入的重写 RxHttpClient - 如果这有任何意义 - 理论上没有实践过的东西可能会撞到大砖墙
  • @Client(BintrayConfiguration.BINTRAY_API_URL) 在这种情况下 BintrayConfiguration.BINTRAY_API_URL 它只是常量变量,关于 BintrayLowLevelClient 是的,您扩展此类并将任何 Client 路径到 fetchPackages(),顺便说一下在扩展BintrayLowLevelClient之前定义不同Clients,我的意思是它也不是动态one客户端,它可以是几个预定义的Clients,然后你可以路径到扩展BintrayLowLevelClient
猜你喜欢
  • 2013-03-28
  • 1970-01-01
  • 2017-05-10
  • 2018-11-09
  • 2021-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多