use of io.nuls.message.bus.handler.intf.NulsMessageHandler in project nuls by nuls-io.
the class MessageClassificationProcessor method doHandlers.
private void doHandlers(DisruptorData<ProcessData<E>> disruptorData) {
if (null == disruptorData || disruptorData.getData() == null) {
Log.warn("there is null data in disruptorData!");
return;
}
if (disruptorData.isStoped()) {
disruptorData.setStoped(false);
return;
}
ProcessData processData = disruptorData.getData();
Class<? extends BaseMessage> serviceId = processData.getData().getClass();
Set<NulsMessageHandler> handlers = handlerManager.getHandlerList(serviceId);
ThreadPoolExecutor handlerExecutor = (ThreadPoolExecutor) handlerService.get(serviceId);
if (handlerExecutor == null) {
handlerExecutor = TaskManager.createThreadPool(1, 1000000, new NulsThreadFactory(MessageBusConstant.MODULE_ID_MESSAGE_BUS, "disruptor-processor"));
handlerService.put(serviceId, handlerExecutor);
}
for (NulsMessageHandler handler : handlers) {
handlerExecutor.execute(new NulsMessageCall(processData, handler));
}
}
use of io.nuls.message.bus.handler.intf.NulsMessageHandler in project nuls by nuls-io.
the class HandlerManager method getHandlerList.
public Set<NulsMessageHandler> getHandlerList(Class<M> clazz) {
Set<String> ids = messageHandlerMapping.get(clazz);
Set<NulsMessageHandler> set = new HashSet<>();
do {
if (null == ids || ids.isEmpty()) {
break;
}
for (String id : ids) {
if (StringUtils.isBlank(id)) {
continue;
}
NulsMessageHandler handler = handlerMap.get(id);
if (null == handler) {
continue;
}
set.add(handler);
}
} while (false);
if (!clazz.equals(BaseMessage.class)) {
set.addAll(getHandlerList((Class<M>) clazz.getSuperclass()));
}
return set;
}
use of io.nuls.message.bus.handler.intf.NulsMessageHandler in project nuls by nuls-io.
the class MessageBusServiceImplTest method subscribeMessage.
/**
* 验证订阅后的返回值
* 验证订阅后handlerMap中的值
* 验证订阅后messageHandlerMapping中的值
* Validate the subscription's return value
* Verify the value of the handlerMap & messageHandlerMapping after subscribing
*/
@Test
public void subscribeMessage() throws Exception {
subscribe();
assertNotNull(handlerId);
Field field = messageBusService.getClass().getDeclaredField("processorManager");
field.setAccessible(true);
DispatchManager processorManager = (DispatchManager) field.get(messageBusService);
// 验证订阅后handlerMap中的值
Class processorManagerClass = processorManager.getClass();
Field handlerMapField = processorManagerClass.getDeclaredField("handlerMap");
handlerMapField.setAccessible(true);
Map<String, NulsMessageHandler> handlerMap = (Map<String, NulsMessageHandler>) handlerMapField.get(processorManager);
assertNotNull(handlerMap.get(handlerId));
assertEquals(handlerMap.get(handlerId), messageHandler);
// 验证订阅后messageHandlerMapping中的值
Field messageHandlerMappingField = processorManagerClass.getDeclaredField("messageHandlerMapping");
messageHandlerMappingField.setAccessible(true);
Map<Class, Set<String>> messageHandlerMapping = (Map<Class, Set<String>>) messageHandlerMappingField.get(processorManager);
assertNotNull(messageHandlerMapping.get(block));
assertTrue(messageHandlerMapping.get(block).contains(handlerId));
}
use of io.nuls.message.bus.handler.intf.NulsMessageHandler in project nuls by nuls-io.
the class MessageBusServiceImplTest method unsubscribeMessage.
/**
* 验证取消订阅后handlerMap中的值
* Verify the value in handlerMap after unsubscribing
* @throws Exception
*/
@Test
public void unsubscribeMessage() throws Exception {
messageBusService.unsubscribeMessage(handlerId);
Field field = messageBusService.getClass().getDeclaredField("processorManager");
field.setAccessible(true);
DispatchManager processorManager = (DispatchManager) field.get(messageBusService);
// 验证取消订阅后handlerMap中的值
Class processorManagerClass = processorManager.getClass();
Field handlerMapField = processorManagerClass.getDeclaredField("handlerMap");
handlerMapField.setAccessible(true);
Map<String, NulsMessageHandler> handlerMap = (Map<String, NulsMessageHandler>) handlerMapField.get(processorManager);
assertNull(handlerMap.get(handlerId));
}
Aggregations