让我们尝试使用Dapr将Ruby和Java进行集成

首先

继续使用Java来体验Dapr,以简化微服务开发。

在中国,可以用以下的方式来表达:
对应于教程第六步。
请参考以下代码:
https://github.com/koduki/example-dapr/tree/v01

概括内容

在教程中使用Python,但在个人爱好问题中使用Ruby。
这个结构的关键是Ruby和Java不直接通信,Ruby只与自己的Sidecar Dapr交流,而不是直接与启动Dapr的Java进行交流。

dapr_sample01.png

由于测试是本地的,实际上可以直接说出来,但为了简单起见,我们将Java的Dapr端口设置为3500,Ruby的Dapr端口设置为3600。

代码 (Mandarin Chinese)

这个版本只是每秒发出一次请求到目标 API 的超级简单的代码。
javaapp 是 Java 应用的 appid。使用它会自动发现合适的应用程序。不需要指定 API 正在运行的 IP 或端口号。
在 Ruby 代码中指定的 http://localhost:#{MY_DAPR_PORT} 是 Ruby 端的 Dapr,而不是 Java 端的 Dapr。所以始终是 localhost,并且端口号不是 3500 而是 3600。

require 'net/https'
require "json"

MY_DAPR_PORT=ARGV[0]

n = 0
while true do
    n += 1
    params = {data: {orderId: n}}

    url = "http://localhost:#{MY_DAPR_PORT}/v1.0/invoke/javaapp/method/neworder"
    uri = URI.parse(url)
    http = Net::HTTP.new(uri.host, uri.port)

    headers = { "Content-Type" => "application/json" }
    response = http.post(uri.path, params.to_json, headers)

    sleep 1
end

执行和确认

让我们尝试执行它。Dapr似乎不仅可以包装Web应用程序,还可以无问题地包装命令。
首先,启动API端。

$ dapr run --app-id javaapp --app-port 8080 --port 3500 ./mvnw quarkus:dev

接下来,在另一个终端上启动客户端。

$ dapr run --app-id rubyapp --port 3600 ruby app.rb 3600

查看Java端的执行结果如下所示。

== APP == orderId: 1
== APP == orderId: 2
== APP == orderId: 3

你能清楚地看到它每秒钟都被准时执行。

通过执行 “dapr list” 命令,您可以查看当前正在运行的 Dapr 的列表。

$dapr list
  APP ID   HTTP PORT  GRPC PORT  APP PORT  COMMAND             AGE  CREATED              PID    
  rubyapp  3600       55932      0         ruby app.rb 3600    28m  2020-05-24 21:08.13  44897  
  javaapp  3500       56777      8080      ./mvnw quarkus:dev  3d   2020-05-21 21:21.30  27471  

总结

我成功地通过Ruby和Java使用Dapr进行通信。

这个体系结构的有趣之处在于,无论是Ruby代码还是Java代码,它们只是与Dapr进行交互,因此在此期间不需要过多关注安全性,可以使用HTTP或gRPC等进行通信。由于Dapr之间负责通信的加密和认证等安全方面的工作,因此可以将与安全相关的部分外包出来,这是非常重要的。

由于应该有分散追踪、Twitter API和Kafka等其他连接器,所以我想试试看这些方面。虽然最初我以为它类似于KNative这样的微服务支持层,但那边更多关注构建环境、FaaS和无服务器等基础设施,而这边更注重应用程序的机制,所以它也被CNCF采纳了,未来这个工具肯定会受人关注。

广告
将在 10 秒后关闭
bannerAds