[ https://issues.apache.org/jira/browse/IGNITE-15572?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Pavel Pereslegin reassigned IGNITE-15572: ----------------------------------------- Assignee: Pavel Pereslegin > 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 > Assignee: Pavel Pereslegin > Priority: Major > > 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)