Supervision in akka based system with Spring
I implemented a custom mechanism for integrating Akka with Spring as DI framework where I registered ActorSystem as a singleton-scoped bean:
@Configuration
internal open class SpringAkkaConfiguration
{
@Bean
open fun actorSystem(@Value("${akka.tcp.port}") akkaTcpPort: Int): ActorSystem
{
val config = ConfigFactory
.defaultApplication()
.withValue("akka.remote.netty.tcp.port", ConfigValueFactory.fromAnyRef(akkaTcpPort))
.withValue("akka.remote.netty.tcp.hostname", ConfigValueFactory.fromAnyRef("localhost"))
.withValue("akka.loglevel", ConfigValueFactory.fromAnyRef("WARNING"))
return ActorSystem.create("system", config)
}
}
@Component
internal class SpringActorSystem(private val actorSystem: ActorSystem,
private val beanFactory: BeanFactory) : SpringAkka
{
override fun announce(actorClass: Class<out Actor>): ActorRef
{
val props = Props.create(SpringIndirectActorProducer::class.java, beanFactory, actorClass)
return actorSystem.actorOf(props, actorClass.simpleName)
}
}
and within which I created two "Manager" actors using custom annotation @Actor, which indicates it's scope to "prototype":
@Target(AnnotationTarget.CLASS, AnnotationTarget.TYPE)
@Retention(AnnotationRetention.RUNTIME)
@Component
@Scope("prototype")
annotation class Actor
@Actor
internal class FirstManager(private val connectionService: ConnectionService) : AbstractActor()
{
override fun createReceive(): Receive = receiveBuilder().build()
}
@Actor
internal class SecondManager(private val connectionService: ConnectionService) : AbstractActor()
{
override fun createReceive(): Receive = receiveBuilder().build()
}
Each actor is picked up from IoC and registered in ActorSystem as a child, everything worked perfectly fine to the moment I came up with the idea of creating child actors to managers so hierarchy would look as follows:
-system
- FirstManager
-firstchild
-secondchild
-SecondManager
-first-child
-second-child
What would be a good solution for registering the following children to each manager but not to ActorSystem itself to build up mentioned hierarchy? Each child actor is dependant upon some other services and I would like to have a possibility to inject them without hassle. Example:
@Actor
internal class ChildActor(private val anotherService: AnotherService): AbstractActor()
{
override fun createReceive(): Receive = receiveBuilder().build()
}
spring akka actor
add a comment |
I implemented a custom mechanism for integrating Akka with Spring as DI framework where I registered ActorSystem as a singleton-scoped bean:
@Configuration
internal open class SpringAkkaConfiguration
{
@Bean
open fun actorSystem(@Value("${akka.tcp.port}") akkaTcpPort: Int): ActorSystem
{
val config = ConfigFactory
.defaultApplication()
.withValue("akka.remote.netty.tcp.port", ConfigValueFactory.fromAnyRef(akkaTcpPort))
.withValue("akka.remote.netty.tcp.hostname", ConfigValueFactory.fromAnyRef("localhost"))
.withValue("akka.loglevel", ConfigValueFactory.fromAnyRef("WARNING"))
return ActorSystem.create("system", config)
}
}
@Component
internal class SpringActorSystem(private val actorSystem: ActorSystem,
private val beanFactory: BeanFactory) : SpringAkka
{
override fun announce(actorClass: Class<out Actor>): ActorRef
{
val props = Props.create(SpringIndirectActorProducer::class.java, beanFactory, actorClass)
return actorSystem.actorOf(props, actorClass.simpleName)
}
}
and within which I created two "Manager" actors using custom annotation @Actor, which indicates it's scope to "prototype":
@Target(AnnotationTarget.CLASS, AnnotationTarget.TYPE)
@Retention(AnnotationRetention.RUNTIME)
@Component
@Scope("prototype")
annotation class Actor
@Actor
internal class FirstManager(private val connectionService: ConnectionService) : AbstractActor()
{
override fun createReceive(): Receive = receiveBuilder().build()
}
@Actor
internal class SecondManager(private val connectionService: ConnectionService) : AbstractActor()
{
override fun createReceive(): Receive = receiveBuilder().build()
}
Each actor is picked up from IoC and registered in ActorSystem as a child, everything worked perfectly fine to the moment I came up with the idea of creating child actors to managers so hierarchy would look as follows:
-system
- FirstManager
-firstchild
-secondchild
-SecondManager
-first-child
-second-child
What would be a good solution for registering the following children to each manager but not to ActorSystem itself to build up mentioned hierarchy? Each child actor is dependant upon some other services and I would like to have a possibility to inject them without hassle. Example:
@Actor
internal class ChildActor(private val anotherService: AnotherService): AbstractActor()
{
override fun createReceive(): Receive = receiveBuilder().build()
}
spring akka actor
add a comment |
I implemented a custom mechanism for integrating Akka with Spring as DI framework where I registered ActorSystem as a singleton-scoped bean:
@Configuration
internal open class SpringAkkaConfiguration
{
@Bean
open fun actorSystem(@Value("${akka.tcp.port}") akkaTcpPort: Int): ActorSystem
{
val config = ConfigFactory
.defaultApplication()
.withValue("akka.remote.netty.tcp.port", ConfigValueFactory.fromAnyRef(akkaTcpPort))
.withValue("akka.remote.netty.tcp.hostname", ConfigValueFactory.fromAnyRef("localhost"))
.withValue("akka.loglevel", ConfigValueFactory.fromAnyRef("WARNING"))
return ActorSystem.create("system", config)
}
}
@Component
internal class SpringActorSystem(private val actorSystem: ActorSystem,
private val beanFactory: BeanFactory) : SpringAkka
{
override fun announce(actorClass: Class<out Actor>): ActorRef
{
val props = Props.create(SpringIndirectActorProducer::class.java, beanFactory, actorClass)
return actorSystem.actorOf(props, actorClass.simpleName)
}
}
and within which I created two "Manager" actors using custom annotation @Actor, which indicates it's scope to "prototype":
@Target(AnnotationTarget.CLASS, AnnotationTarget.TYPE)
@Retention(AnnotationRetention.RUNTIME)
@Component
@Scope("prototype")
annotation class Actor
@Actor
internal class FirstManager(private val connectionService: ConnectionService) : AbstractActor()
{
override fun createReceive(): Receive = receiveBuilder().build()
}
@Actor
internal class SecondManager(private val connectionService: ConnectionService) : AbstractActor()
{
override fun createReceive(): Receive = receiveBuilder().build()
}
Each actor is picked up from IoC and registered in ActorSystem as a child, everything worked perfectly fine to the moment I came up with the idea of creating child actors to managers so hierarchy would look as follows:
-system
- FirstManager
-firstchild
-secondchild
-SecondManager
-first-child
-second-child
What would be a good solution for registering the following children to each manager but not to ActorSystem itself to build up mentioned hierarchy? Each child actor is dependant upon some other services and I would like to have a possibility to inject them without hassle. Example:
@Actor
internal class ChildActor(private val anotherService: AnotherService): AbstractActor()
{
override fun createReceive(): Receive = receiveBuilder().build()
}
spring akka actor
I implemented a custom mechanism for integrating Akka with Spring as DI framework where I registered ActorSystem as a singleton-scoped bean:
@Configuration
internal open class SpringAkkaConfiguration
{
@Bean
open fun actorSystem(@Value("${akka.tcp.port}") akkaTcpPort: Int): ActorSystem
{
val config = ConfigFactory
.defaultApplication()
.withValue("akka.remote.netty.tcp.port", ConfigValueFactory.fromAnyRef(akkaTcpPort))
.withValue("akka.remote.netty.tcp.hostname", ConfigValueFactory.fromAnyRef("localhost"))
.withValue("akka.loglevel", ConfigValueFactory.fromAnyRef("WARNING"))
return ActorSystem.create("system", config)
}
}
@Component
internal class SpringActorSystem(private val actorSystem: ActorSystem,
private val beanFactory: BeanFactory) : SpringAkka
{
override fun announce(actorClass: Class<out Actor>): ActorRef
{
val props = Props.create(SpringIndirectActorProducer::class.java, beanFactory, actorClass)
return actorSystem.actorOf(props, actorClass.simpleName)
}
}
and within which I created two "Manager" actors using custom annotation @Actor, which indicates it's scope to "prototype":
@Target(AnnotationTarget.CLASS, AnnotationTarget.TYPE)
@Retention(AnnotationRetention.RUNTIME)
@Component
@Scope("prototype")
annotation class Actor
@Actor
internal class FirstManager(private val connectionService: ConnectionService) : AbstractActor()
{
override fun createReceive(): Receive = receiveBuilder().build()
}
@Actor
internal class SecondManager(private val connectionService: ConnectionService) : AbstractActor()
{
override fun createReceive(): Receive = receiveBuilder().build()
}
Each actor is picked up from IoC and registered in ActorSystem as a child, everything worked perfectly fine to the moment I came up with the idea of creating child actors to managers so hierarchy would look as follows:
-system
- FirstManager
-firstchild
-secondchild
-SecondManager
-first-child
-second-child
What would be a good solution for registering the following children to each manager but not to ActorSystem itself to build up mentioned hierarchy? Each child actor is dependant upon some other services and I would like to have a possibility to inject them without hassle. Example:
@Actor
internal class ChildActor(private val anotherService: AnotherService): AbstractActor()
{
override fun createReceive(): Receive = receiveBuilder().build()
}
spring akka actor
spring akka actor
asked Nov 11 at 18:02
sh1nen
549
549
add a comment |
add a comment |
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53251623%2fsupervision-in-akka-based-system-with-spring%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53251623%2fsupervision-in-akka-based-system-with-spring%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown