Yeah, the json format of SQL Transport sounds good. As we normally use the text in the mailing list, so please draw asiis picture or put a permanent link in the mail for us to review.
Willem Jiang Twitter: willemjiang Weibo: 姜宁willem On Tue, Aug 21, 2018 at 10:11 AM, 新道场开张了 <tsubasa...@qq.com> wrote: > I think we can extend Transport interface to a new interface named > SQLTransport. > the SQLTransport also include 'with' function, but the parameters only > requires datasource/serviceName, sql and parameters. > Users can decide how to execute the sql of the datasource/serviceName in > their own SQLTransport implements. > > > In order to invoke SQLTransport successfully, we need to modify the > Operation, Transaction and Compensation setions of Format for matching new > json requests. > the new json structure is: > { > "policy":"", > "requests":[ > { > "id":"", > "type":"SQL", > "serviceName(or datasource)":"", > "parents":[], > "transaction":{ > "sql":"", > "params":[] (or {}) > }, > "compensation":{ > "sql":"", > "params":[] (or {}) > } > } > ] > } > > > > ------------------ 原始邮件 ------------------ > *发件人:* "Willem Jiang"<willem.ji...@gmail.com>; > *发送时间:* 2018年8月21日(星期二) 上午8:34 > *收件人:* "dev"<dev@servicecomb.apache.org>; > *主题:* Re: [DISCUSS]Add a local or embedded interface to call Saga > > The saga patten is quite simple, if call is failed, the compensation method > should be called. > I know someone already provide the framework[1] with Scala to simplify the > complex if else check. > The PersonService and EmailService can be the remote service or local > service. > > val persistInvoiceAndSendEmail: Future[Email :: Person :: HNil] = saga > .part[Person](PersonService.addInvoice(person, invoice), p => > PersonService.deleteInvoice(p, invoice)) > .part[Email](EmailService.sendInvoice(person.email, invoice), letter > => EmailService.sendExcuse(letter.email, > EmailService.createExcuse(letter))) > .run > > persistInvoiceAndSendEmail.onComplete { > case Success(email :: person :: HNil) => > logger.debug("There you can manage process results") > case Failure(SagaFailed(message, _)) => > logger.error(s"One saga part has been failed due to $message") > } > > > > [1]https://github.com/dobrynya/saga > > > Willem Jiang > > Twitter: willemjiang > Weibo: 姜宁willem > > On Mon, Aug 20, 2018 at 10:26 PM, Zheng Feng <zh.f...@gmail.com> wrote: > > > Thanks Willem and it is a good point here. Also I'm interesting how it > > could be used in the local or the embedded interface ? I wonder if you > can > > consider the ACID transaction in this situation. > > The Saga in my options could be more used for the distributed > environment. > > > > Regard, > > Amos > > > > 2018-08-20 18:00 GMT+08:00 Willem Jiang <willem.ji...@gmail.com>: > > > > > the saga-core has a transport[1] interface which could be used for the > > > purpose, now it just have the Restful implementation. > > > If you want to implement a RPC or some local method, you can just > > implement > > > the transport interface. > > > As the saga-core using json for the invocation, you need to updated the > > > request/response json module[2] there. > > > > > > [1] > > > https://github.com/apache/incubator-servicecomb-saga/ > > > blob/master/saga-core/src/main/java/org/apache/servicecomb/saga/core/ > > > Transport.java#L20:18 > > > [2] > > > https://github.com/apache/incubator-servicecomb-saga/ > > > tree/master/saga-format > > > > > > > > > > > > Willem Jiang > > > > > > Twitter: willemjiang > > > Weibo: 姜宁willem > > > > > > On Mon, Aug 20, 2018 at 5:37 PM, 新道场开张了 <tsubasa...@qq.com> wrote: > > > > > > > Hi, all: > > > > > > > > > > > > Currently, service comb saga have implemented transaction management > > > based > > > > on microservice. > > > > But in some cases, users want to use Saga with a simpler way, such as > > > > local or embedded call. > > > > So we want to discuss whether it is possible to extend a local or > > > embedded > > > > interface. > > > > When the user implements the embedded interface and injects Saga into > > the > > > > native program, > > > > Saga calls the local method directly instead of calling the > > microservice. > > > > > > > > > > > > Best Wishes & Regards > > > > > > >