2017-01-18 8 views
0

この質問が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ネットワークの設定?ミナの設定? (クライアントマシンからサーバーマシンへの最初のメッセージは接続後に来る)

上記の情報にヒントが含まれることを願っています。

+1

あなたのVMは、インバウンド通信を許可するためにあなたがNSGのルールを作成できますか?そうでない場合は、[チュートリアル](https://docs.microsoft.com/en-us/azure/virtual-network/virtual-networks-create-nsg-arm-pportal)を参照してAzureポータルで設定してみてください。もう一度あなたのミーナのアプリケーション。すべてのアップデート、私に知らせるために自由に感じてください。 –

+0

@ PeterPan-MSFTあなたはウィザードです!ありがとうございました!以前NSGについて知りませんでした。私は下に私の答えを掲載しました。 – Antonio

答えて

2

私はPeter Pan - MSFTについて約NSG - Network Security Groupと書いてありがとうございました。

NSGは、Windowsファイアウォールのようなイン/アウトルールを制御します。あなたは、NSGを作成し、これにルールを追加し、特定のエンティティにNSGを割り当てる必要があります。

NSGを割り当てるには、少なくとも2つのオプションがあります。

  • ネットワークサブネット
  • にネットワークインタフェース

チュートリアル1とJavaコードサンプル2があります。私の場合、別々のネットワークインターフェイスが各VMに対して作成されます(各VMはパブリックIPを持っているため)。だから、私は1つのNSGを1つのサブネットに割り当てました。

・ファースト、NSGを作成:明示的にNSGのサブネットを定義し、割り当てるためにコードを修正したより

NetworkSecurityGroup NSG = azure.networkSecurityGroups() 
        .define(networkSecurityGroup) 
        .withRegion(region) 
        .withExistingResourceGroup(resourceGroup) 
        .defineRule("Inbound") 
         .allowInbound() 
         .fromAnyAddress() 
         .fromAnyPort() 
         .toAnyAddress() 
         .toAnyPort() 
         .withAnyProtocol() 
         .withDescription("Incoming messsages") 
         .withPriority(100) 
         .attach() 
        .create(); 

subnet1は自動的にNSGなしで作成されて何も明示的に定義されていない場合)だから、

Network.DefinitionStages.WithCreate creatableNetwork = azure.networks() 
        .define(networkName) 
        .withRegion(region) 
        .withExistingResourceGroup(resourceGroup) 
        .withAddressSpace("10.0.0.0/20") 
        .defineSubnet(subnetName) 
         .withAddressPrefix("10.0.0.0/20") 
         .withExistingNetworkSecurityGroup(NSG) 
         .attach(); 

残りのコードは上記の質問に掲載されているものと同じです。

参考リンク:

  1. Azure Portal Tutorial
  2. Java Azure SDK NSG Example
関連する問題