You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Pavel Pereslegin (Jira)" <ji...@apache.org> on 2021/09/23 11:04:00 UTC

[jira] [Created] (IGNITE-15572) Ability to set custom execution context for Ignite service.

Pavel Pereslegin created IGNITE-15572:
-----------------------------------------

             Summary: Ability to set custom execution context for Ignite service.
                 Key: IGNITE-15572
                 URL: https://issues.apache.org/jira/browse/IGNITE-15572
             Project: Ignite
          Issue Type: New Feature
            Reporter: Pavel Pereslegin


In traditional microservices, we have the ability to set a custom execution context.
For example, a REST service can read the session ID from a request. We can say that each client request, in this case, has a set of explicit and implicit parameters.  One of the implicit parameters is a session identifier that can be passed to the service using request headers.

It would be nice to have a similar feature in Ignite services.

The basic idea behind the implementation:
1. Allow the user to bind the "execution context" to the client proxy object.
2. Pass an additional implicit parameter each time the user service method is called.

Sample code for specifying "headers".
{code:java}
// Creating "request headers".
Map<String, Object> headers = Collections.singletonMap("user.id", 1);

// Binding "request headers" to proxy invocation handler.
IMyService svcProxy = ignite.services().serviceProxy("service1", IMyService.class, false, headers);

// Service method invocation using this proxy.
handle(svcProxy.multiply(2, 2));
handle(svcProxy.multiply(3, 3));
handle(svcProxy.multiply(4, 4));
...
{code}

Sample code for reading "headers".
{code:java}
class MyServiceImpl implements IMyService {
    @LoggerResource
    private IgniteLogger log;

    private ServiceContext ctx;

    @Override public void init(ServiceContext ctx) {
        this.ctx = ctx;
    }

    @Override public int multiply(int a, int b) {
        log.info(String.format("user=%d, oper=%s, a=%d, b=%d", ctx.getHeaders().get("user.id"), "multiply", a, b));

        return a * b;
    }

    ...
}
{code}




--
This message was sent by Atlassian Jira
(v8.3.4#803005)