Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

No Format
//메이븐 설정추가
<dependency>
  <groupId>com.typesafe.akka</groupId>
  <artifactId>akka-remote_2.11<12</artifactId>
  <version>${akka.version}</version>
</dependency>


//application.conf 설정 추가
akka {
  actor {
    provider = remote
  }
  remote {
    enabled-transports = ["akka.remote.netty.tcp"]
    netty.tcp {
      hostname = "0.0.0.0"
      port = 2552
    }
 }
}



// 로컬로 설계된 메시지,직렬화 상속받기
public class SomeMessage implements Serializable {
....}

...

Code Block
languagejava
themeEmacs
public class TestActor extends UntypedActor UntypedAbstractActor{
    private final LoggingAdapter log = Logging
            .getLogger(getContext().system(), "TestActor");

    @Override
    public void onReceive(Object message) throws Exception {    	    	
    	if(message instanceof String) {	//String뿐만 아니라 모든 Java객체 통신가능
    		log.info("Incommessage {}", message);
    		sender().tell("너의 메시지에 응답을함", ActorRef.noSender());    		
    	}else {
    		log.info("Unhandle Message {}", message);    		
    	}    	
    }
}

//service1 이름으로 액터의 엔드포인트를 생성했습니다.
ActorRef testActor = system.actorOf(ext.props("testActor"),"service1");  //Service1이란 이름으로 TestActor를 생성함

...

Code Block
languagejava
themeEmacs
//엔드포인트를 통한 액터선택자
ActorSelection testActorRemote = system.actorSelection("akka.tcp://app@localhost:2552/user/service1");


//리모트를 통한 전송
testActorRemote.tell("발사후망각-응답필요없음",ActorRef.noSender() );  //ActorRef에 수신녀석을 지정하여 어떠한 결과를 받을수도 있습니다.

//응답이 동기적으로 필요한경우
CompletableFuture<Object> future1 =
		  ask(testActorRemote, "응답하라 1979", 1000).toCompletableFuture();

//너의 메시지에 응답을함 이란 메시지를 받음 -이해를 돕기위해 동기처리로 전환
String result = String.valueOf(future1.get());  
2018-05-05 13:54:46,324 INFO - Started CachedbApplication in 5.808 seconds (JVM running for 6.798)
Expand
title실행로그

[INFO] [05/05/2018 1315:5415:4729.232433] [mainAkkaTestApp-akka.actor.default-dispatcher-5] [Application] Starting upTestActor] Incommessage ready spring boot

[INFO] [05/05/2018 1315:5415:4729.254435] [AkkaTestApp-akka.actor.default-dispatcher-25] [TestActor] Incommessage ready spring boot -again
[INFO] [05/05/2018 1315:5415:4729.255435] [AkkaTestApp-akka.actor.default-dispatcher-25] [TestActor] Incommessage ready spring boot 발사후망각-again응답
[INFO] [05/05/2018 1315:5415:4729.256438] [AkkaTestApp-akka.actor.default-dispatcher-23] [TestActor] Incommessage 발사후망각-응답필요없음응답하라 1979
[INFO] [05/05/2018 15:15:29.441] [main] [Application] msg result:너의 메시지에 응답을함
[INFO] [05/05/2018 1315:5415:4729.258800] [AkkaTestApp-akka.actor.default-dispatcher-24] [TestActor] Incommessage 응답하라 1979
fasmsg to slow 0[INFO] [05/05/2018 1315:5415:4729.641800] [AkkaTestApp-akka.actor.default-dispatcher-2] [TestActor] Incommessage fasmsg to slow 0akka://AkkaTestApp/deadLetters] Message [java.lang.String] without sender to Actor[akka://AkkaTestApp/deadLetters] was not delivered. [4] dead letters encountered. This logging can be turned off or adjusted with configuration settings 'akka.log-dead-letters' and 'akka.log-dead-letters-during-shutdown'.
[INFO] [05/05/2018 1315:5415:4729.641934] [AkkaTestApp-akka.actor.default-dispatcher-24] [TestActor] Incommessage fasmsg to slow 1
[INFO] [05/05/2018 1315:5415:4730.643022] [AkkaTestApp-akka.actor.default-dispatcher-24] [TestActor] Incommessage fasmsg to slow 2
[INFO] [05/05/2018 1315:5415:4730.643121] [AkkaTestApp-akka.actor.default-dispatcher-23] [TestActor] Incommessage fasmsg to slow 3
[INFO] [05/05/2018 1315:5415:4730.643207] [AkkaTestApp-akka.actor.default-dispatcher-2] [TestActor] Incommessage fasmsg to slow 4

...