この質問がMina関連であるかAzure関連であるかはわかりませんが、ネットワーキングと関係があります。 MinaとNettyは多くのネットワーキング原則を共有しているので、Netty
タグも追加しました。AzureとApache Mina
私はどこに掘り起こすべきかアドバイスを得ることを望みます。
私はローカルネットワークでかなり長いMinaアプリケーションを使用していますが、今はクラウドに移行しようとしています。私はAzureにLinux仮想マシンを導入しています(それぞれ公開IPを持っていますが、これは本当に重要ですか?)。
彼らはAzure以外のマシン(Minaを使用)にも のパブリックIPを接続します。通常のもの:
SocketConnector connector = new NioSocketConnector(numberOfConnectors);
ConnectFuture connectFuture = connector.connect(new
InetSocketAddress(remoteHost, remotePort));
connectFuture.awaitUninterruptibly(connectTimeout);
アズレの外のミナマシンもミナを走らせます。サーバマシンの としましょう。
session.write(message);
:
NioSocketAcceptor acceptor = new NioSocketAcceptor(acceptor_threads);
org.apache.mina.core.buffer.IoBuffer.setUseDirectBuffer(false);
acceptor.getSessionConfig().setTcpNoDelay(true);
acceptor.setReuseAddress(true);
acceptor.getSessionConfig().setSendBufferSize(buffer_size);
acceptor.getSessionConfig().setMinReadBufferSize(64000);
acceptor.getSessionConfig().setReceiveBufferSize(buffer_size);
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, iddle_time);
acceptor.getFilterChain().addLast("codec", new
ProtocolCodecFilter(CodecFactory.getInstance()));
acceptor.setDefaultLocalAddress(new InetSocketAddress(port));
Azureのアプリケーションは、サーバー・マシンに接続し、サーバーが非同期でこのように、将来的に戻ってメッセージをプッシュする
IoSession session
を保存します。
それは、このような接続を受け入れます
これはローカルネットワーク(Azureなし)の内部でうまくいきましたが、現在の 展開サーバーは、メッセージ
2017-01-17/15:45:19.823/GMT-00:00 [nioEventLoopGroup-3-3] [...] DEBUG
Sending message to /13.94.143.139:41790
送信し、Azureのマシンは何も受信しません。また、 次の例外は、サーバマシン上で発生している間後:
2017-01-17/16:01:11.419/GMT-00:00 [NioProcessor-4] [...] ERROR
Exception in IOHandlerConnection timed out
java.io.IOException: Connection timed out
at sun.nio.ch.FileDispatcherImpl.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
at sun.nio.ch.IOUtil.read(IOUtil.java:197)
at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:380)
at org.apache.mina.transport.socket.nio.NioProcessor.read(NioProcessor.java:280)
at org.apache.mina.transport.socket.nio.NioProcessor.read(NioProcessor.java:44)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.read(AbstractPollingIoProcessor.java:695)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:668)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:657)
at org.apache.mina.core.polling.AbstractPollingIoProcessor.access$600(AbstractPollingIoProcessor.java:68)
at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:1141)
at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
2017-01-17/16:01:11.424/GMT-00:00 [NioProcessor-3] [...] DEBUG sessionClosed
私はミナのバージョン2.0.4を(はい、それは古いですが、それは今のところ、数年前から、ローカルネットワーク上で動作します)を使用します。
私のJavaのAzure SDK 1.0.0-ベータ3でセットアップAzureのネットワーク
Network.DefinitionStages.WithCreate creatableNetwork = azure.networks()
.define(networkName)
.withRegion(region)
.withExistingResourceGroup(resourceGroup)
.withAddressSpace("10.0.0.0/20");
そして
VirtualMachine.DefinitionStages.WithCreate creatableVirtualMachine =
azure.virtualMachines()
.define(String.format(...))
.withRegion(region)
.withExistingResourceGroup(resourceGroup)
.withNewPrimaryNetwork(creatableNetwork)
.withPrimaryPrivateIpAddressStatic(inetAddress.getHostAddress())
.withNewPrimaryPublicIpAddress(String.format("chr-vm-%04d", i)) .withPopularLinuxImage(KnownLinuxVirtualMachineImage.UBUNTU_SERVER_16_04_LTS)
.withRootUserName(linuxUserName)
.withPassword(linuxUserPassword)
.withSize(VirtualMachineSizeTypes.STANDARD_D2_V2)
.withNewStorageAccount(creatableStorageAccount);
として仮想マシンを作成して、私は理由が アズール、サーバからクライアントへ旅行するメッセージが表示されないことだろうかマシン? Azureネットワークの設定?ミナの設定? (クライアントマシンからサーバーマシンへの最初のメッセージは接続後に来る)
上記の情報にヒントが含まれることを願っています。
あなたのVMは、インバウンド通信を許可するためにあなたがNSGのルールを作成できますか?そうでない場合は、[チュートリアル](https://docs.microsoft.com/en-us/azure/virtual-network/virtual-networks-create-nsg-arm-pportal)を参照してAzureポータルで設定してみてください。もう一度あなたのミーナのアプリケーション。すべてのアップデート、私に知らせるために自由に感じてください。 –
@ PeterPan-MSFTあなたはウィザードです!ありがとうございました!以前NSGについて知りませんでした。私は下に私の答えを掲載しました。 – Antonio