我一直在努力研究過去兩天,試圖找出如何將基本控制檯應用程序部署到Azure輔助角色並使其具備可以從某種基於客戶端的應用程序遠程訪問,例如MVC網絡應用程序。下面的答案如何在Azure輔助角色(AKKA.NET)中配置遠程參與者配置
1
A
回答
2
我開始讓我的Actor狀態包含在我的MVC應用程序與之通信的本地控制檯應用程序中。我希望將自己的應用程序部署到Azure生態系統中,並且認爲將狀態維持在工作者角色之內,並在應用程序服務中託管一個思維「客戶端」MVC應用程序,這將是最好的前進方向。
確保您的Actor系統從您的解決方案中解壓縮到它自己的項目中。在解決方案中創建一個新的Worker角色CloudService項目。
我配置我的WorkRole如下:
public class WorkerRole : RoleEntryPoint
{
private readonly CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
private readonly ManualResetEvent runCompleteEvent = new ManualResetEvent(false);
private static ActorSystem ActorSystemInstance;
public override void Run()
{
Trace.TraceInformation("Game.State.WorkerRole is running");
try
{
this.RunAsync(this.cancellationTokenSource.Token).Wait();
}
finally
{
this.runCompleteEvent.Set();
}
}
public override bool OnStart()
{
ActorSystemInstance = ActorSystem.Create("GameSystem");
// Set the maximum number of concurrent connections
ServicePointManager.DefaultConnectionLimit = 12;
// For information on handling configuration changes
// see the MSDN topic at https://go.microsoft.com/fwlink/?LinkId=166357.
bool result = base.OnStart();
Trace.TraceInformation("Game.State.WorkerRole has been started");
return result;
}
public override void OnStop()
{
ActorSystemInstance.Terminate();
Trace.TraceInformation("Game.State.WorkerRole is stopping");
this.cancellationTokenSource.Cancel();
this.runCompleteEvent.WaitOne();
base.OnStop();
Trace.TraceInformation("Game.State.WorkerRole has stopped");
}
private async Task RunAsync(CancellationToken cancellationToken)
{
var gameController = ActorSystemInstance.ActorOf<GameControllerActor>("GameController");
while (!cancellationToken.IsCancellationRequested)
{
Trace.TraceInformation("Working");
await Task.Delay(1000);
}
}
}
而且我HOCON文件(在app.config內)如下:
<akka>
<hocon>
<![CDATA[
akka {
loglevel = DEBUG
actor {
provider = "Akka.Remote.RemoteActorRefProvider, Akka.Remote"
debug {
receive = on
autoreceive = on
lifecycle = on
event-stream = on
unhandled = on
}
}
remote {
helios.tcp {
transport-class = "Akka.Remote.Transport.Helios.HeliosTcpTransport, Akka.Remote"
transport-protocol = tcp
enforce-ip-family = true
port = xxxx //the port configured in your worker role endpoint
hostname = "0.0.0.0" //This is the local hostname of the worker role, using 0.0.0.0 will set the Remote actor to "listen" on all available DNS/IP addresses including the loopback (127.0.0.1)
pulic-hostname = "xx.xx.xx.xx" //IP Address OR DNS name, but whatever is set here is what MUST be used in the Actor Selector path on the client in order for proper "association" to occur. I did find that DNS name was required for my application as I was using SignalR as a bridge between the Actor system and the web client.
}
}
}
]]>
</hocon>
我們需要在工作人員角色配置中定義我們的端點,以便我們「暴露」我們可以與外界溝通的端口。所以去你的WorkerRole設置。
一旦工作者角色部署,你應該能夠確認該端口是telnet'ing到服務器開放和可用通過它的IP和端口,你以前配置。
與我們的客戶設置我們ActorSelection最重要的部分是IP/DNS地址如下必須匹配與IP/DNS輔助角色
ActorReferences.GameController =
ActorSystem.ActorSelection("akka.tcp://[email protected]:8091/user/GameController")
.ResolveOne(TimeSpan.FromSeconds(3))
.Result;
內的公共主機名設置中設置的HOCON配置
爲了完整這裏是我的客戶HOCON配置:
akka {
loglevel = OFF
actor {
provider = "Akka.Remote.RemoteActorRefProvider, Akka.Remote"
debug {
receive = on
autoreceive = on
lifecycle = on
event-stream = on
unhandled = on
}
}
remote {
helios.tcp {
transport-class = "Akka.Remote.Transport.Helios.HeliosTcpTransport, Akka.Remote"
transport-protocol = tcp
enforce-ip-family = true
port = 0 //A port will be provided for us... not important as we won't be calling into the client externally
public-hostname = "yoursitename.azurewebsites.net" //Remember this is simply the DNS name of the client machine
hostname = "127.0.0.1"
}
}
}
我真的希望這可以幫助別人那裏。我沒有發現很多描述Azure的部署到Azure的文檔(沒有將Actor系統部署到易失性的IIS應用服務)。讓我知道我是否可以以任何方式改進答案。
相關問題
- 1. Azure的網絡/輔助角色讀取配置設置
- 2. 使用Azure輔助角色進行配置文件轉換
- 3. Azure Worker角色配置
- 4. Azure角色配置管理
- 5. 的Azure的輔助角色
- 6. 如何執行每實例Azure工作者角色配置?
- 7. 如何注入Azure輔助角色?
- 8. 爲網絡/輔助角色配置內部負載平衡器
- 9. 配置git輔助回購
- 10. 如何使用Appsetting配置Akka.Net 1.3.0在Asp.net核心配置
- 11. Azure的PROD和DEV角色配置
- 12. Azure:不要按配置部署角色
- 13. Azure工作者角色忽略ServiceConfiguration.Local配置
- 14. 遠程調試Azure工作者角色
- 15. 在角色配置文件中使用參數化角色
- 16. 如何在Azure輔助角色中使用證書?
- 17. 將Azure輔助角色連接到專用緩存輔助角色
- 18. 如何配置ParsleyJs遠程
- 19. 異常時,從Azure的輔助角色
- 20. 無法從Azure的輔助角色
- 21. 從輔助角色使用Azure Cmdlet
- 22. Azure的輔助角色大會地點
- 23. Azure的服務費,輔助角色
- 24. Azure的輔助角色被陷在角色狀態未知
- 25. Akka.Net的完整HOCON配置
- 26. 如何在輔助角色上設置計時器?
- 27. 在Windows Azure角色之間共享配置設置
- 28. Akka.net:訪問羣集中的遠程參與者
- 29. 如何在本地/內部託管Azure輔助角色?
- 30. 如何上傳在Windows Azure上的輔助角色