Java Akka Actors在多次使用同一Actor类后未收到任何消息。
akka参与者的实例未收到任何消息 这是我们的演员。演员在收到消息后运行卡夫卡消费者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;
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