在 Elixir (erlang) 的 cluster 裡,所有 process 的 pid (地址),預設就是可以在整個 cluster 使用,只要拿到一個 process 的 pid,不管是在同個 node ,或是透過 cluster 連接的另外一台機器都可以直接傳送訊息。
要在不同的 node 拿到另一個 node 的 pid,最簡單的方式是使用 erlang 模組 :global
裡面的 register_name
函式
# node 1
iex(node1@localhost)1> :global.register_name("node 1 的 iex", self())
:yes
# node 2
iex(node2@localhost)2> pid = :global.whereis_name("node 1 的 iex")
#PID<13598.114.0>
使用 :global.whereis_name
查詢同個名字便可以得到他的 pid
得到 pid 代表可以傳送訊息
# node 2
iex(node2@localhost)4> send(pid, "hello")
"hello"
在 node 1 使用 iex 提供的 flush
印出信箱內剛剛得到的 "hello"
# node 1
iex(node1@localhost)2> flush
"hello"
:ok
也可以查查看這個 pid 在哪個 node 上
@ node 2
iex(node2@localhost)5> node(pid)
:node1@localhost