Java Akka Actors在多次使用同一Actor类后未收到任何消息。

Java Akka Actors在多次使用同一Actor类后未收到任何消息。,java,spring-boot,akka,apache-kafka,kafka-consumer-api,Java,Spring Boot,Akka,Apache Kafka,Kafka Consumer Api,akka参与者的实例未收到任何消息 这是我们的演员。演员在收到消息后运行卡夫卡消费者 package package1.akka; import java.util.HashMap; import java.util.List; import java.util.Map; import package.kafka.SimpleConsumer; import package.utils.StringUtils; import kafka.consumer.ConsumerIterator;

akka参与者的实例未收到任何消息

这是我们的演员。演员在收到消息后运行卡夫卡消费者

package package1.akka;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import package.kafka.SimpleConsumer;
import package.utils.StringUtils;
import kafka.consumer.ConsumerIterator;
import kafka.consumer.KafkaStream;
import kafka.javaapi.consumer.ConsumerConnector;

import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import akka.actor.ActorSelection;
import akka.actor.UntypedActor;


@Component
@Scope("prototype")
public class TestAKKAActor  extends UntypedActor{

    private @Value("${kafka}") String kafka;

    ActorSelection messageParentActor = AkkaFactory
            .getActorSystem(SystemType.LOCAL)
            .actorSelection("akka://AKKASystem/user/messageParentActor");


    Logger logger = org.slf4j.LoggerFactory.getLogger(TestAKKAActor.class);

    @Override
    public void onReceive(Object arg0) throws Exception {
        System.out.println("hi! message recieved");
        processAkkaMessage("x"+StringUtils.generateRandomKey(5));
        if(arg0.equals(Msg.DONE)){
            context().system().shutdown();
        }

    }

    public void processAkkaMessage(Object arg0){

        // topic has to be 16 digit
        String topic = arg0.toString();
        String randomFiller = StringUtils.generateRandomKey(4)
                + StringUtils.generateRandomKey(4);
        String group = "c" + randomFiller;
        logger.info("Consumer Activating for >> {}", topic);
        SimpleConsumer csc = new SimpleConsumer(kafka+ ":2181", group);

        ConsumerConnector consumerConnector = csc.getConsumerConnector();
        Map<String, Integer> topicCountMap = new HashMap<String, Integer>();

        topicCountMap.put(topic, new Integer(1));

        Map<String, List<KafkaStream<byte[], byte[]>>> consumerMap = consumerConnector
                .createMessageStreams(topicCountMap);

        KafkaStream<byte[], byte[]> stream = consumerMap.get(topic).get(0);

        ConsumerIterator<byte[], byte[]> it = stream.iterator();
        while (it.hasNext()) {

            String newString = new String(it.next().message());

            try {
                System.out.println(newString);
            } catch (Exception e) {
                e.printStackTrace();
            }

        }

        context().stop(getSelf());;
    }



}

如上面的日志所示,“hi!message received”日志只打印了3次。但是,在删除消费代码时。消息全部被接收五次。

我猜您的
循环过程中,对流的迭代器处理永远不会完成,因为流本身是非终端的。如果是这种情况,那么这些参与者将永远不会完成接收,因此不会将线程释放回调度程序。因此,我猜调度器正处于饥饿状态,因此无法在3之后将消息分派给其他actor实例。感谢您的输入。在阅读了你的评论之后,我添加了这个调度程序,并将其分配给了演员<代码>阻塞io调度程序{
type=dispatcher
executor=“线程池执行器”
线程池执行器{
固定池大小=32
}
吞吐量=1
}
我能够让大约12名消费者使用此功能运行,但此后我就陷入了死胡同。有什么建议可以帮助我度过难关吗?谢天谢地,我猜想您的
while
循环在流上处理迭代器永远不会完成,因为流本身是非终端的。如果是这种情况,那么这些参与者将永远不会完成接收,因此不会将线程释放回调度程序。因此,我猜调度器正处于饥饿状态,因此无法在3之后将消息分派给其他actor实例。感谢您的输入。在阅读了你的评论之后,我添加了这个调度程序,并将其分配给了演员<代码>阻塞io调度程序{
type=dispatcher
executor=“线程池执行器”
线程池执行器{
固定池大小=32
}
吞吐量=1
}
我能够让大约12名消费者使用此功能运行,但此后我就陷入了死胡同。有什么建议可以帮助我度过难关吗?谢谢
package package1.service;

import package1.akka.AkkaFactory;
import package1.akka.SystemType;
import package1.config.SpringExtension;
import package1.utils.StringUtils;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import akka.actor.ActorRef;

@Component
public class TestManager {

    @Autowired
    SpringExtension ext;

    public void test() {
        for (int i = 1; i <= 5; i++) {

            //
            String actorName = "c" + new StringUtils().generateRandomKey(5);
            //generating a random string for the akka actor name.


            ActorRef testACTOR = AkkaFactory.getActorSystem(SystemType.LOCAL)
                    .actorOf(ext.props("testAKKAActor"), actorName);

            testACTOR.tell("MESSAGE", null);
        }

    }
}
2016-02-18 16:22:24.064  INFO 15835 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring FrameworkServlet 'dispatcherServlet'
2016-02-18 16:22:24.065  INFO 15835 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization started
2016-02-18 16:22:24.096  INFO 15835 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization completed in 31 ms
hi! message recieved
hi! message recieved
2016-02-18 16:22:24.195  INFO 15835 --- [t-dispatcher-10] package1.akka.TestAKKAActor                  : Consumer Activating for >> xkKmU4
2016-02-18 16:22:24.195  INFO 15835 --- [lt-dispatcher-5] package1.akka.TestAKKAActor                  : Consumer Activating for >> xW6yCq
hi! message recieved
2016-02-18 16:22:24.195  INFO 15835 --- [lt-dispatcher-2] package1.akka.TestAKKAActor                  : Consumer Activating for >> xnCPLM
2016-02-18 16:22:24.203  INFO 15835 --- [t-dispatcher-10] org.apache.zookeeper.ZooKeeper           : Initiating client connection, connectString=localhost:2181 sessionTimeout=400 watcher=org.I0Itec.zkclient.ZkClient@71eee08
2016-02-18 16:22:24.208  INFO 15835 --- [min.local:2181)] org.apache.zookeeper.ClientCnxn          : Opening socket connection to server fadmin.local/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error)
2016-02-18 16:22:24.208  INFO 15835 --- [lt-dispatcher-2] org.apache.zookeeper.ZooKeeper           : Initiating client connection, connectString=localhost:2181 sessionTimeout=400 watcher=org.I0Itec.zkclient.ZkClient@6bdda2eb
2016-02-18 16:22:24.209  INFO 15835 --- [min.local:2181)] org.apache.zookeeper.ClientCnxn          : Socket connection established to fadmin.local/127.0.0.1:2181, initiating session
2016-02-18 16:22:24.209  INFO 15835 --- [min.local:2181)] org.apache.zookeeper.ClientCnxn          : Opening socket connection to server fadmin.local/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error)
2016-02-18 16:22:24.209  INFO 15835 --- [lt-dispatcher-5] org.apache.zookeeper.ZooKeeper           : Initiating client connection, connectString=localhost:2181 sessionTimeout=400 watcher=org.I0Itec.zkclient.ZkClient@14e20f5f
2016-02-18 16:22:24.210  INFO 15835 --- [min.local:2181)] org.apache.zookeeper.ClientCnxn          : Socket connection established to fadmin.local/127.0.0.1:2181, initiating session
2016-02-18 16:22:24.211  INFO 15835 --- [min.local:2181)] org.apache.zookeeper.ClientCnxn          : Opening socket connection to server fadmin.local/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error)
2016-02-18 16:22:24.211  INFO 15835 --- [min.local:2181)] org.apache.zookeeper.ClientCnxn          : Socket connection established to fadmin.local/127.0.0.1:2181, initiating session
2016-02-18 16:22:24.226  INFO 15835 --- [min.local:2181)] org.apache.zookeeper.ClientCnxn          : Session establishment complete on server fadmin.local/127.0.0.1:2181, sessionid = 0x152f3af925700ab, negotiated timeout = 6000
2016-02-18 16:22:24.227  INFO 15835 --- [t-dispatcher-10] package1.kafka.SimpleConsumer                : Consumer started with group id: cj9UWsoFu
2016-02-18 16:22:24.259  INFO 15835 --- [min.local:2181)] org.apache.zookeeper.ClientCnxn          : Session establishment complete on server fadmin.local/127.0.0.1:2181, sessionid = 0x152f3af925700ac, negotiated timeout = 6000
2016-02-18 16:22:24.260  INFO 15835 --- [min.local:2181)] org.apache.zookeeper.ClientCnxn          : Session establishment complete on server fadmin.local/127.0.0.1:2181, sessionid = 0x152f3af925700ad, negotiated timeout = 6000
2016-02-18 16:22:24.268  INFO 15835 --- [lt-dispatcher-2] package1.kafka.SimpleConsumer                : Consumer started with group id: cUTZi2kSe
2016-02-18 16:22:24.269  INFO 15835 --- [lt-dispatcher-5] package1.kafka.SimpleConsumer                : Consumer started with group id: cJ6sE9NfW