Search in sources :

Example 1 with NulsMessageHandler

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));
    }
}
Also used : NulsThreadFactory(io.nuls.kernel.thread.manager.NulsThreadFactory) NulsMessageCall(io.nuls.message.bus.processor.thread.NulsMessageCall) NulsMessageHandler(io.nuls.message.bus.handler.intf.NulsMessageHandler) ThreadPoolExecutor(java.util.concurrent.ThreadPoolExecutor) ProcessData(io.nuls.message.bus.model.ProcessData)

Example 2 with NulsMessageHandler

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;
}
Also used : BaseMessage(io.nuls.protocol.message.base.BaseMessage) NulsMessageHandler(io.nuls.message.bus.handler.intf.NulsMessageHandler) HashSet(java.util.HashSet)

Example 3 with NulsMessageHandler

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));
}
Also used : Field(java.lang.reflect.Field) Set(java.util.Set) DispatchManager(io.nuls.message.bus.manager.DispatchManager) NulsMessageHandler(io.nuls.message.bus.handler.intf.NulsMessageHandler) Map(java.util.Map) Test(org.junit.Test)

Example 4 with NulsMessageHandler

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));
}
Also used : Field(java.lang.reflect.Field) DispatchManager(io.nuls.message.bus.manager.DispatchManager) NulsMessageHandler(io.nuls.message.bus.handler.intf.NulsMessageHandler) Map(java.util.Map) Test(org.junit.Test)

Aggregations

NulsMessageHandler (io.nuls.message.bus.handler.intf.NulsMessageHandler)4 DispatchManager (io.nuls.message.bus.manager.DispatchManager)2 Field (java.lang.reflect.Field)2 Map (java.util.Map)2 Test (org.junit.Test)2 NulsThreadFactory (io.nuls.kernel.thread.manager.NulsThreadFactory)1 ProcessData (io.nuls.message.bus.model.ProcessData)1 NulsMessageCall (io.nuls.message.bus.processor.thread.NulsMessageCall)1 BaseMessage (io.nuls.protocol.message.base.BaseMessage)1 HashSet (java.util.HashSet)1 Set (java.util.Set)1 ThreadPoolExecutor (java.util.concurrent.ThreadPoolExecutor)1