2017-06-12 77 views
0

我的电脑上有两个节点([email protected][email protected])。
bar节点中有一个简单的根服务器:Elixir - 从另一个节点呼叫gen服务器

defmodule Bar.Server do 
    use ExActor.GenServer, export: :bar_server 
    defstart start_link, do: initial_state(0) 
    defcall get, state: state, do: reply(state) 
    defcast(set(num), state: state, do: new_state(state + num)) 
end 

的Genserver启动并运行 所以当我运行:

GenServer.call(:bar_server, :get) 

它完美的作品。
我在富Node.connect :'[email protected]'
运行连接foobar和我所期望的是,现在foo将是熟悉genserver :aabar
但是 - 当我运行

GenServer.call(:bar_server, :get) 

我得到:

(EXIT) no process: the process is not alive or there's no process currently associated with the given name, possibly because its application isn't started 

我假设我错过了一些东西。但可以弄清楚什么。

+2

这是否工作:'GenServer.call({:bar_server,: 'bar @ my-pc'},:get)'? – Dogbert

+0

是的,我确实。谢谢 – fay

回答

4

假设你只需要在两个节点之间运行GenServer的一个实例,你需要明确注册GenServer全球:

use ExActor.GenServer, export: {:global, :bar_server} 
+0

这是假设连接同一集群中两个节点(在kubernetes上)时工作。因为出于某种原因,当我尝试访问genserver时,我总是收到错误'没有进程...'。 ? – fay

+0

对不起,我忘了提及您需要使用'GenServer.call({:global,:bar_server},:get)调用' –

+0

如何在一台机器上运行Gen服务器的多个实例时处理? – shubhamagiwal92