开发者社区 > 云原生 > Serverless > 正文

Serverless 应用引擎关于调用的问题请教一下?

Serverless 应用引擎我python的rest服务,java去调用,java服务注册在nacos上的,python服务注册在k8s上的,feign或者其他方式是不是不能调的通?

展开
收起
嘟嘟嘟嘟嘟嘟 2024-01-05 07:57:42 67 0
4 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    在您的场景中,Python的REST服务和Java服务分别注册在不同的平台上,这确实可能带来一些调用问题。具体来说,如果使用Feign这样的工具来调用服务,由于服务注册的地点不同(一个在K8s上,另一个在Nacos上),直接使用服务名进行调用可能会遇到问题。

    然而,您仍然有一些解决方案可以考虑:

    1. 如果您希望保持现有的服务注册方式不变,您可以在K8s集群内部设置一个服务,该服务负责从K8s中拉取Python服务的地址信息,并暴露给Java应用。这样,Java应用就可以通过这个内部服务来间接调用Python服务了。

    2. 另一种方法是将Python服务迁移到Nacos上进行注册。这样,无论是Java服务还是其他语言的服务,都可以通过Nacos来发现和调用Python服务。但这种方法可能需要您对现有的部署流程进行一些调整。

    3. 您还可以考虑使用Serverless应用引擎(SAE)的微服务治理功能。SAE深度集成了微服务引擎(MSE),提供了更多免费的高级治理能力。通过配置路由规则,您可能可以在不改变现有服务注册方式的情况下,实现不同语言服务之间的互通。

    2024-01-06 12:59:39
    赞同 展开评论 打赏
  • 在您的场景中,Python 的 REST 服务注册在 K8s 上,而 Java 服务注册在 Nacos 上。要实现 Java 服务调用 Python 服务,您需要确保两者之间的通信是可达的。

    以下是一些可能的方法来实现这一目标:
    1.直接调用:如果 Python 的 REST 服务已经暴露了外部端口并且可以被外部访问,Java 可以通过其服务名和相应的端口直接调用 Python 服务。
    2.服务发现:如果您的 K8s 和 Nacos 环境支持服务发现,Java 服务可以通过 Nacos 发现 Python 服务,并直接调用。
    3.使用负载均衡器:在某些情况下,您可能需要使用负载均衡器来统一管理和转发请求。这样,Java 服务可以发送请求到负载均衡器,而负载均衡器会根据需要将请求转发到 Python 服务。
    4.使用 API Gateway:如果您的项目允许,您可以使用 API Gateway 来集中管理和路由请求。这样,Java 服务可以向 API Gateway 发送请求,API Gateway 负责将请求转发到正确的服务。
    5.使用 Feign:Feign 是一个声明式的 Web Service 客户端,使得编写 Web Service 客户端变得更加简单。但是,为了使用 Feign,您需要确保您的服务都支持 HTTP 协议。如果 Python 的 REST 服务支持 HTTP 协议,您可以使用 Feign 在 Java 中进行调用。

    至于“k8的服务名”,您是指 K8s 中 Python 服务的服务名吗?如果是这样,您需要知道该服务的服务名(通常与 Pod 名称或部署名称相关),然后使用该服务名进行调用。

    2024-01-05 11:13:20
    赞同 展开评论 打赏
  • 在您的场景中,您希望使用Java调用Python的REST服务,而这个Python服务部署在K8s上,并且Java服务注册在Nacos上。对于这种情况,虽然Feign是一个常用的微服务调用工具,但直接使用Feign来调用可能并不可行。这是因为Feign主要用于Spring Cloud微服务体系内,而且它的服务发现机制通常是基于Eureka或Ribbon来实现的。

    考虑到您的情况,一个可行的方案是让Python服务也注册到Nacos上,然后让Java服务通过Nacos来发现并调用Python服务。这种方式可以确保服务的发现和负载均衡都是基于Nacos来完成的。另外,由于K8s上部署的服务和Nacos之间的网络通信可能会受到限制,您可能需要在它们之间设置适当的网络策略或者使用Service Mesh技术(如Istio)来确保通信的顺畅。

    2024-01-05 09:07:45
    赞同 展开评论 打赏
  • 如果是同一个命名空间,网络是互通的话,应该是可以调通的。对,你可以webshell登陆到java,然后ping一下看看能不能通,如果能通的话,至少http方式肯定是能调度的。http内网调用服务名+端口就行了。此回答整理自钉群“【3群】Serverless应用引擎(SAE)用户群”

    2024-01-05 07:59:05
    赞同 展开评论 打赏

快速交付实现商业价值。

相关产品

  • 函数计算
  • 热门讨论

    热门文章

    相关电子书

    更多
    All in Serverless 阿里云核心产品全面升级 立即下载
    AIGC 浪潮之上,森马的 Serverless 实践之旅 立即下载
    极氪大数据 Serverless 应用实践 立即下载