Search in sources :

Example 1 with Middleware

use of services.moleculer.service.Middleware in project moleculer-java by moleculer-java.

the class Cacher method install.

// --- ADD MIDDLEWARE TO ACTION ---
@Override
public Action install(Action action, Tree config) {
    // Is caching enabled?
    Tree cacheNode = config.get("cache");
    if (cacheNode == null) {
        return null;
    }
    // Get cache keys
    Tree keyNode = cacheNode.get("keys");
    final String[] keys;
    if (keyNode == null) {
        keys = null;
    } else {
        List<String> list = keyNode.asList(String.class);
        if (list.isEmpty()) {
            keys = null;
        } else {
            keys = new String[list.size()];
            list.toArray(keys);
        }
    }
    // Get TTL (0 = use default TTL)
    final int ttl = cacheNode.get("ttl", 0);
    return new Action() {

        @Override
        public Object handler(Context ctx) throws Exception {
            String key = getCacheKey(ctx.name, ctx.params, keys);
            return new Promise(resolver -> {
                get(key).then(in -> {
                    if (in == null || in.isNull()) {
                        new Promise(action.handler(ctx)).then(tree -> {
                            set(key, tree, ttl);
                            resolver.resolve(tree);
                        }).catchError(err -> {
                            resolver.reject(err);
                        });
                    } else {
                        resolver.resolve(in);
                    }
                }).catchError(err -> {
                    resolver.reject(err);
                });
            });
        }
    };
}
Also used : Context(services.moleculer.context.Context) List(java.util.List) Action(services.moleculer.service.Action) Middleware(services.moleculer.service.Middleware) Tree(io.datatree.Tree) Context(services.moleculer.context.Context) Name(services.moleculer.service.Name) Promise(services.moleculer.Promise) Promise(services.moleculer.Promise) Action(services.moleculer.service.Action) Tree(io.datatree.Tree)

Example 2 with Middleware

use of services.moleculer.service.Middleware in project moleculer-java by moleculer-java.

the class Sample method main.

public static void main(String[] args) throws Exception {
    System.out.println("START");
    try {
        ServiceBrokerConfig cfg = new ServiceBrokerConfig();
        // RedisTransporter t = new RedisTransporter();
        // t.setDebug(false);
        // cfg.setTransporter(t);
        ServiceBroker broker = new ServiceBroker(cfg);
        MathService math = new MathService();
        broker.createService(math);
        broker.start();
        broker.use(new Middleware() {

            @Override
            public Action install(Action action, Tree config) {
                if (config.get("name", "?").equals("v1.math.test")) {
                    return new Action() {

                        @Override
                        public Object handler(Context ctx) throws Exception {
                            Object original = action.handler(ctx);
                            Object replaced = System.currentTimeMillis();
                            broker.getLogger().info("Middleware invoked! Replacing " + original + " to " + replaced);
                            return replaced;
                        }
                    };
                }
                return null;
            }
        });
        broker.waitForServices("v1.math").then(ok -> {
            for (int i = 0; i < 2; i++) {
                broker.call("v1.math.add", "a", 3, "b", 5).then(in -> {
                    broker.getLogger(Sample.class).info("Result: " + in);
                }).catchError(err -> {
                    broker.getLogger(Sample.class).error("Error: " + err);
                });
            }
            System.out.println("FIRST CALL ->3");
            broker.call("service2.test", new Tree(), CallOptions.retryCount(3)).catchError(cause -> {
                cause.printStackTrace();
            });
        });
        ((DefaultContextFactory) broker.getConfig().getContextFactory()).setMaxCallLevel(3);
        Thread.sleep(1000);
        broker.createService(new Service2Service());
        Thread.sleep(1000);
        broker.createService(new Service3Service());
        Thread.sleep(60000);
    } catch (Exception e) {
        e.printStackTrace();
    }
    System.out.println("STOP");
}
Also used : Context(services.moleculer.context.Context) DefaultContextFactory(services.moleculer.context.DefaultContextFactory) CallOptions(services.moleculer.context.CallOptions) Listener(services.moleculer.eventbus.Listener) Cache(services.moleculer.cacher.Cache) Action(services.moleculer.service.Action) Middleware(services.moleculer.service.Middleware) Version(services.moleculer.service.Version) Name(services.moleculer.service.Name) Subscribe(services.moleculer.eventbus.Subscribe) Dependencies(services.moleculer.service.Dependencies) Service(services.moleculer.service.Service) Tree(io.datatree.Tree) Context(services.moleculer.context.Context) ServiceBrokerConfig(services.moleculer.config.ServiceBrokerConfig) Action(services.moleculer.service.Action) ServiceBrokerConfig(services.moleculer.config.ServiceBrokerConfig) Middleware(services.moleculer.service.Middleware) DefaultContextFactory(services.moleculer.context.DefaultContextFactory) Tree(io.datatree.Tree)

Aggregations

Tree (io.datatree.Tree)2 Context (services.moleculer.context.Context)2 Action (services.moleculer.service.Action)2 Middleware (services.moleculer.service.Middleware)2 Name (services.moleculer.service.Name)2 List (java.util.List)1 Promise (services.moleculer.Promise)1 Cache (services.moleculer.cacher.Cache)1 ServiceBrokerConfig (services.moleculer.config.ServiceBrokerConfig)1 CallOptions (services.moleculer.context.CallOptions)1 DefaultContextFactory (services.moleculer.context.DefaultContextFactory)1 Listener (services.moleculer.eventbus.Listener)1 Subscribe (services.moleculer.eventbus.Subscribe)1 Dependencies (services.moleculer.service.Dependencies)1 Service (services.moleculer.service.Service)1 Version (services.moleculer.service.Version)1