Implementation of integrating spring cloud into Python

Time:2021-3-17

preface

This article shares how toPython WebService integrated intoSpring CloudAnd call its services,Python WebThe frame is made ofTornado

Building Python Web Services

Introducing py Eureka client


pip install py_eureka_client

manage.py

#!/usr/bin/env python
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
import py_eureka_client.eureka_client as eureka_client
from tornado.options import define, options
from time import sleep

define("port", default=3333, help="run on the given port", type=int)

class IndexHandler(tornado.web.RequestHandler):
  def get(self):
    username = self.get_argument('username', 'Hello')
    self.write(username + ', Administrator User!')
    
  def post(self):
    username = self.get_argument('username', 'Hello')
    self.write(username + ', Administrator User!')

class MainHandler(tornado.web.RequestHandler):
  def get(self):
    username = self.get_argument('username', 'Hello')
    self.write(username + ', Coisini User!')

  def post(self):
    username = self.get_argument('username', 'Hello')
    self.write(username + ', Coisini User!')

def main():
  tornado.options.parse_command_line()
  #Register Eureka service
  eureka_client.init_registry_client(eureka_server="http://localhost:31091/eureka/,http://localhost:8761/eureka/",
                    app_name="python-tornado",
                    instance_port=3333)
  app = tornado.web.Application(handlers=[(r"/test", IndexHandler), (r"/main", MainHandler)])
  http_server = tornado.httpserver.HTTPServer(app)
  http_server.listen(options.port)
  tornado.ioloop.IOLoop.instance().start()

if __name__ == '__main__':
  main()

Generally speaking, the above code, to the port is31091The registry registration service name for ispython-tornadoThe port is3333, two request methods are providedGETandPOST, the interface path is/testand/mainExternal calling interface of

Start the python service (create an Eureka service registry before that)


python manage.py runserver

Running results

Service invocation (feign) – feign is used to call HTTP API conveniently

congfigClass needs to be annotated@EnableFeignClients, please use Baidu

TestController.java


@RestController
public class TestController {
  private TestAPIClient testAPIClient;

  @Autowired
  public TestController(TestAPIClient testAPIClient) {
    this.testAPIClient = testAPIClient;
  }

  @PostMapping("/test")
  public String test(@RequestParam String username) throws Exception {
    return this.testAPIClient.test(username);
  }
  
  @GetMapping("/test")
  public String test1() throws Exception {
    return this.testAPIClient.test1();
  }
}

TestAPIClient.java


@FeignClient(name="python-tornado", configuration = FeignConfigure.class)
public interface TestAPIClient {
  @PostMapping("/test")
  String test(@RequestParam("username") String username);
  
  @GetMapping("/test")
  String test1();
}

FeignConfigure.java


import feign.Logger;
import feign.codec.Encoder;
import feign.form.spring.SpringFormEncoder;
import org.springframework.beans.factory.ObjectFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.web.HttpMessageConverters;
import org.springframework.cloud.netflix.feign.support.SpringEncoder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class FeignConfigure {
  @Bean
  Logger.Level feignLoggerLevel() {
    return Logger.Level.FULL;
  }

  @Autowired
  private ObjectFactory<HttpMessageConverters> messageConverters;
  
  @Bean
  public Encoder feignFormEncoder() {
    return new SpringFormEncoder(new SpringEncoder(messageConverters));
  }
}

Feign dependency


<!-- Feign Client -->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
<dependency>
  <groupId>io.github.openfeign.form</groupId>
  <artifactId>feign-form</artifactId>
  <version>3.4.1</version>
</dependency>
<dependency>
  <groupId>io.github.openfeign.form</groupId>
  <artifactId>feign-form-spring</artifactId>
  <version>3.4.1</version>
</dependency>

Running results

Here, we use the request toolPostmanTo test it, we can see that theTestControllercallTestAPIClientThen call the python service. So far, the micro service has finished calling the python web service

The above is the whole content of this article, I hope to help you learn, and I hope you can support developer more.

Recommended Today

SQL exercise 20 – Modeling & Reporting

This blog is used to review and sort out the common topic modeling architecture, analysis oriented architecture and integration topic reports in data warehouse. I have uploaded these reports to GitHub. If you are interested, you can have a lookAddress:https://github.com/nino-laiqiu/TiTanI recorded a relatively complete development process in my hexo blog deployed on GitHub. You can […]