2017-06-12 42 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