解决spring-boot-Admin的服务端和客户端不在同一个服务器的通信问题

SpringbootAdmin能够用来监控项目的运行情况,其具体介绍以及初步入门大家可以参考博客:

https://www.jianshu.com/p/2b66433bd373

按照这篇博客的内容进行配置的话,相信大家已经看到了运行的结果,结果还是非常令人兴奋的(对于初次接触这个东东的人而言)。既然有了这么好用的东西,肯定要实际使用。接下来的使用中就遇到令人蛋疼的问题了,困扰了几天。

先说一下问题:我按照上面的博客,重新写了server端,按照博客的介绍把公司的一个项目配置成了客户端。在我的win10系统电脑上面运行这两个程序是没有问题的。但是当实际部署的时候就遇到了问题:我把springbootAdmin的server端部署到了Linux系统服务器(服务器1),把要监控的项目部署到了另一台Linux服务器(服务器2),这两台服务器处于同一个局域网内。运行这两个项目,发现程序server端能够发现这个我的client项目,但是client项目一直处于断开状态。如图:

 

查看client端打印出来的log日志,发现提示为:应用注册失败

然后查看server端的log日志(这里强烈建议大家配置一下log日志,这样能够看到项目运行的一些信息):

这里能够发现问题:我的client端的ip地址根部就不是上面所写的ip地址。那么问题就弄清楚了,造成错误的原因是server端没有获取到正确的client地址,从而获取client的各种信息时失败了。(这里说的简单,我实际查找原因的时候也是费了很多的周折,深入到源代码一级去研究整个过程才弄明白了错误原因。这里好像我很厉害,其实源代码大部分我是看不懂的)。

 

既然找到了问题的原因那接下来的解决问题就变得容易些了(我之所以耗了几天就是因为定为不到问题的原因,从而在网上找不到正确的解决方法。之所以定为不到问题的原因,就是因为没有对server端进行log配置。可见这里log配置是多么的重要啊!!!)。解决方法就是在client端添加如下的配置:

这个配置的所用就是告知server监听的client的ip地址。有了这个配置后,server就可以根据正确的client地址获取到client端的信息了(看到有个博客讲过,当不配置这个属性的时候,client默认会把电脑名称发送给server当做client的地址,这也就是上面的图片中能够看到PV3这个名称的原因)。

 

总结:现在看来这个问题之所以是一个问题,原因就在于我们对springbootAdmin的配置不熟悉。其实只要认真的看springbootAdmin的参考手册,参考手册上面对这些配置都是进行了介绍的。

 

最后,给出springbootAdmin的参考手册地址为:http://codecentric.github.io/spring-boot-admin/2.0.1/

其中客户端的所有配置属性在3.4节表1,服务端的所有配置属性在第4章表3。以后有时间的话要深入研究下这些属性的作用。

 

 

 

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
对于动态创建UDP服务端客户端,你可以使用Spring Boot提供的spring-boot-starter-integration模块来实现。下面是一个简单的示例: 首先,确保在你的项目中引入了spring-boot-starter-integration依赖。在pom.xml文件中添加以下内容: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-integration</artifactId> </dependency> ``` 接下来,你可以创建一个Spring Boot应用程序,并使用集成组件来动态创建UDP服务端客户端。以下是示例代码: ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; import org.springframework.integration.dsl.IntegrationFlow; import org.springframework.integration.dsl.IntegrationFlows; import org.springframework.integration.ip.udp.UnicastReceivingChannelAdapter; import org.springframework.integration.ip.udp.UnicastSendingMessageHandler; @SpringBootApplication public class UdpApplication { public static void main(String[] args) { SpringApplication.run(UdpApplication.class, args); } @Bean public IntegrationFlow udpInboundFlow() { return IntegrationFlows.from(udpInboundAdapter()) .handle("udpServer", "handleMessage") .get(); } @Bean public UnicastReceivingChannelAdapter udpInboundAdapter() { UnicastReceivingChannelAdapter adapter = new UnicastReceivingChannelAdapter(8888); adapter.setOutputChannelName("udpInboundChannel"); return adapter; } @Bean public IntegrationFlow udpOutboundFlow() { return IntegrationFlows.from("udpOutboundChannel") .handle(udpOutboundAdapter()) .get(); } @Bean public UnicastSendingMessageHandler udpOutboundAdapter() { return new UnicastSendingMessageHandler("localhost", 9999); } @Bean public UdpServer udpServer() { return new UdpServer(); } } import org.springframework.messaging.Message; import org.springframework.stereotype.Component; @Component public class UdpServer { public void handleMessage(Message<String> message) { // 处理UDP服务端接收到的消息 System.out.println("Received message: " + message.getPayload()); } } ``` 在上面的示例中,我们定义了一个UDP服务端一个UDP客户端服务端使用UnicastReceivingChannelAdapter从8888口接收消息,并通过UdpServer类的handleMessage方法进行处理。客户端通过UnicastSendingMessageHandler发送消息到localhost的9999口。 注意:请根据你的实际需求修改口号和处理逻辑。 这样,你就可以通过运行Spring Boot应用程序来创建动态的UDP服务端客户端了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值