×
Community Blog Interview Questions We've Learned Over the Years: SpringCloud

Interview Questions We've Learned Over the Years: SpringCloud

This article is part of a series focusing on interview questions for technicians, with a specific emphasis on SpringCloud.

By Taosu

1

Why SpringCloud

SpringCloud is an ordered collection of frameworks. It uses the development convenience of Spring Boot to skillfully simplify the development of distributed system infrastructure, such as service discovery and registration, configuration center, message bus, load balancing, circuit breaker, and data monitoring, which can be started and deployed with one click in the development style of Spring Boot.

SpringCloud (Microservice Solution) Dubbo (Distributed Service Governance Framework)
Rest API (lightweight, flexible, swagger) RPC remote calls (efficient, coupled)
Eureka and Nacos Zookeeper
Ease of use Good performance
SpringCloud 2.0 is coming soon Restart in 2017 after a 5-year break

Spring Boot is a Maven-based solution launched by Spring to solve the redundancy of traditional framework configuration files and complicated assembly components. It is designed to quickly build a single microservice. SpringCloud is dependent on Spring Boot, but Spring Boot is independent of SpringCloud. It can even be integrated with Dubbo for excellent development.

The microservices proposed by MartinFlower communicate with each other through RestFulApi. Implementations:

  • RestTemplate: Based on HTTP protocol.
  • Feign: It encapsulates Ribbon, Hystrix, and RestTemplate to simplify client development.
  • RPC: Based on the TCP protocol. Serialization and transmission efficiency are significantly improved.
  • MQ: Asynchronously decouples the calls between microservices.

2

Spring Boot

You can create a Spring application by performing simple steps on Spring Boot. Spring Boot provides the out-of-the-box feature for Spring to integrate third-party frameworks. The core idea of Spring Boot is convention over configuration.

Problems Solved by Spring Boot

  • When you build the backend framework, you need to manually add Maven configurations. Many XML configuration files are involved, which increases the difficulty and time cost of the build.
  • Compile the project into a WAR package and deploy it to Tomcat. The project deployment depends on Tomcat, which is very inconvenient.
  • Application monitoring is simple. It usually uses an API without any logic to determine the survival status of applications.

Advantages of Spring Boot

Automatic assembly: Spring Boot initializes all configured beans based on certain rules. It reduces a lot of repeated work.

For example, when using MongoDB, you only need to add the Starter package of MongoDB, configure the connection information, and then you can directly use MongoTemplate automatic assembly to operate the database. It decreases the dependency on Maven Jar packages and reduces the probability of cumbersome configuration errors.

Embedded container: Spring Boot applications do not need to be deployed to external containers, such as Tomcat.

Applications can be directly compiled into an executable Jar package through the Maven command, and the package can be started through the java-jar command, which is very convenient.

Application monitoring: In Spring Boot, with the monitoring feature Actuator, you can monitor the internal operation of the program.

For example, bean loading, environment variables, log information, and thread information. Of course, you can also customize business-related monitoring and expose it through the endpoint information of the Actuator.

spring-boot-starter-web // It is used to quickly build Web projects based on Spring MVC. spring-boot-starter-data-redis // It is used to quickly integrate and operate Redis. spring-boot-starter-data-mongodb // It is used to integrate with MongoDB. spring-boot-starter-data-jpa // It is used to operate MySQL. 

Customize a Starter

  1. Create a Starter project and define the configuration (Properties) classes required by Starter, such as the connection information of the database.
  2. Write automatic configuration classes to obtain the configuration and automatically assemble the bean according to the configuration.
  3. Write spring.factories files to load automatic configuration classes. Spring scans the spring.factories files when it starts.
  4. Write configuration prompt files spring-configuration- metadata.json (not necessary). When adding the configuration, we want to know what role the specific configuration items play, so we can write the prompt file for prompt.
  5. Introduce the Maven dependency of the customized Starter in the project. We can use it after adding the configuration value.

Spring Boot Admin

Visualizing the data provided by the Actuator

  • Displaying application monitoring status, and viewing JVM and thread information
  • Application online and offline monitoring
  • Visually viewing logs and dynamically switching log levels
  • Useful features such as HTTP request information tracing

GateWay / Zuul

The goal of GateWay is to replace Netflix Zuul. GateWay is developed based on technologies such as Spring 5.0, Spring Boot 2.0, and Web Flux. It provides centralized routing (reverse proxy) and basic gateway functions such as authentication, flow control, fusing, path rewriting, and log monitoring based on Filter (defining filters to filter requests and complete some functions).

Elements:

  • Route: The most basic work unit of a gateway. A route consists of an ID, a target URL, a series of predicates (the judgment of matching conditions), and a filter. If the predicate is true, the route is matched.
  • Predicate: Learning from the predicate in Java 8, it matches all content in an HTTP request, which is similar to the location match in NGINX. If the predicate matches the request, the route is performed.
  • Filter: The standard Spring Web Filter. The filter is used to execute the business logic before or after the request.

pre-filters: Used for parameter verification, permission verification, traffic monitoring, log output, and protocol conversion.

post-filters: Used for response content, response header modification, log output, and traffic monitoring.

3

The GateWayFilter is used for a single route and the GlobalFilter is used for all routes.

Eureka / Zookeeper

The service registry is essentially to decouple service providers and service consumers. The number and distribution of microservice providers often change dynamically to support elastic scaling features.

4

Difference Zookeeper Eureka Nacos
CAP CP AP CP/AP switchover
Availability Not available during the election With a self-protection mechanism and data is not up-to-date
Elements Leader and followers Node equality
Advantages Distributed coordination Registration and discovery Registry and configuration center
Underlying Process Service JAR package

Eureka uses mechanisms such as heartbeat detection, health check, and client caching to improve flexibility, scalability, and availability.

5

  1. us-east-1c, us-east-1d, and us-east-1e represent different data centers. Each Eureka server is a cluster.
  2. As a service provider, the service provides the registration service for Eureka. Eureka receives the registration event and performs data synchronization in the clusters and partitions. As a service consumer, the client can obtain service registration information from Eureka and perform service calls.
  3. After the microservice is started, it will periodically send the heartbeat to Eureka (the default period is 30 seconds) to renew the information.
  4. If Eureka does not receive a heartbeat from a microservice node within a specified period (90 seconds by default), Eureka will log off the microservice node.
  5. The Eureka client caches information from the Eureka server. Even if all Eureka server nodes are down, the service consumer can still use the information in the cache to find the service provider.

Eureka Cache

After a new service is launched, service consumers cannot immediately access the newly launched service. It takes some time before they can access it; or, after the service is offline, the service will still be called, and the service will be completely stopped after a period, which will lead to frequent errors in the early stage of the access.

6

After the service is registered in the registry, the service instance information is stored in the registry table, that is, in the memory. However, Eureka has made internal optimization to improve the response speed, adding a two-layer cache structure to directly cache the instance information required by the client. When obtaining the information, you can take the data directly from the cache and respond to the client.

  • The first layer of cache is readOnlyCacheMap, using ConcurrentHashMap to store data. It is mainly responsible for scheduled data synchronization with readWriteCacheMap, and the default synchronization time is 30 seconds.
  • The second layer cache is the readWriteCacheMap, using Guava to cache. By default, the expiration period of the cache is 180 seconds. When a service is offline, expired, registered, or status changed, data in the cache is cleared.
  • If both cache layers cannot be queried, cache loading will be triggered. Data is pulled from the storage layer to the cache and then returned to the client.

Eureka uses the two-level cache mechanism to improve the response speed of Eureka Server. The disadvantage is that the cache causes the client to fail to obtain the latest service instance information, and then causes the new service and the offline service not to be quickly discovered.

Solutions

  • We can shorten the update time of cache reading to make service discovery more timely. We can also directly enable the read-only cache. At the same time, we can shorten the regular refresh interval of clients such as ribbon services. Multi-level caching also leads to a weak C - layer (data consistency).
  • Eureka Server provides a scheduled task to detect expired services and remove the service instance information from the registry. You can also shorten the time required to detect expired services. In this way, services can be cleared from the registry table promptly after they go offline.

Prerequisites to Enable Self-protection Mechanism

  • Expected minimum number of lease renewals per minute (instance × frequency × percentage == 10 × 2 × 0.85)
  • Expected number of service instances (10)

Health Check

  • Eureka client regularly sends heartbeats to Eureka server to prove that the client is in a healthy state.
  • After integrating SBA, all health status information can be returned to Eureka.

Feign / Ribbon

  • Feign can be used in combination with Eureka and Ribbon to support load balancing.
  • Feign can be used in combination with Hystrix to support fuse rollback.
  • Feign can be used in combination with ProtoBuf to implement fast RPC calls.

7

  • InvocationHandlerFactory: Proxy

It uses the JDK dynamic proxy to generate proxy objects. When we call this interface, we are going to call the remote HTTP API.

  • Contract Component

For example, what is the request type? GET or POST? What is the URI of the request?

  • Encoder/ Decoder Components

Through these components, we can encode and decode the requested information using the specified coding method and then transmit it.

  • Logger: Log Recording

It is responsible for recording logs in Feign. It specifies the Logger level and customizes the output of logs.

  • Client: Request Execution Component

The component is responsible for HTTP request execution. The default Client in Feign initiates the request through the JDK HttpURLConnection. Every time a request is sent, a new HttpURLConnection link will be created. Therefore, the performance of Feign will be poor. You can extend this interface and use high-performance HTTP clients based on connection pools such as Apache HttpClient.

  • Retryer: Retry Component

The component is responsible for retry. Feign has a built-in retry device. When an I/O exception occurs in an HTTP request, Feign limits the maximum number of retries.

  • Request Interceptor

You can add multiple interceptors to Feign to set some extended parameter information before the request is executed.

Best Use Tips for Feign

  • Inheritance feature
  • Interceptors

For example, you can add specified request header information, which can be used to pass certain information between services.

  • GET requests multiple parameters
  • Log configuration

FULL outputs all complete request information.

  • Exception Decoder

The exception decoder can obtain the exception information instead of a simple code, and then convert it into the corresponding exception object to return.

  • Viewing the way how the source code inherits Hystrix

In HystrixFeign.builder, you can see that the Builder inherits the Feign and adds the SetterFactory of Hystrix. In the build method, the invocationHandlerFactory is rewritten. A HystrixInvocationHandler is returned when you create, and the request is packaged as a HystrixCommand to execute when you invoke. Hystrix is naturally integrated here.

Ribbon

8

Use Method

  • Native API: Ribbon is an open-source service provided by Netflix. SpringCloud is not used. Instead, the native API of Ribbon is required.
  • Ribbon + RestTemplate: After integrating SpringCloud, you can provide load balancing services based on RestTemplate.
  • Ribbon + Feign:
Component Description
LoadBalancer It defines a series of operation interfaces such as selecting a service instance.
IRule It is an algorithm policy. Many algorithm policies are built in to provide services for the selection of service instances.
ServerList It is responsible for obtaining the service instance information which can be obtained from the configuration file or the registry center.
ServerListFilter It filters out some unwanted service instance information.
ServerListUpdater It is responsible for updating the service instance information of the local cache.
IPing It checks the availability of existing service instances to ensure that the selected services are available.

Load Balancing Algorithm

  • RoundRobinRule is a round-robin algorithm. A and B are selected in turn.
  • RandomRule is a simple random algorithm. It means randomly selecting from the service list.
  • BestAvailableRule selects the smallest concurrent request server.

Customized Load Balancing Algorithm

  • Implementing the Irule interface
  • Inheriting AbstractLoadBalancerRule Class

Customized load balancing scenarios (Core)

  • Canary Release

Canary release is a release method that realizes a smooth transition. During the release process, some applications are released first, allowing specified users to use the newly released applications. After the test is completed without problems, all other applications are released. If there is a problem with the newly released applications, only this part needs to be restored instead of all applications.

  • Multi-version Isolation

Multi-version isolation is similar to canary release. For compatibility or transition, some applications have multiple versions. At this time, we need to consider how to ensure that the client of the 1.0 version will not call the services of the 1.1 version.

  • Fault Isolation

When an online instance fails, in order not to affect users, we usually retain evidence, such as thread information and JVM information, and then restart or directly stop the instance. Then we will analyze the cause of the failure offline according to some information. If the failure can be isolated, we can directly isolate the faulty instance to prevent normal users from requesting access to the faulty instance. Only the specified users are allowed to access it. In this way, the specific user can test and analyze the faulty instance alone.

Hystrix / Sentinel

Service Avalanche Scenario

You are both a service consumer and a provider. As a result of synchronous call waiting, resources are exhausted.

Solutions

Service provider: Capacity expansion, throttling, code troubleshooting, and hardware monitoring.

Consumer: Resource isolation, fuse degradation, and fast failure by using Hystrix.

9

The Role of Hystrix Circuit Breaker

  • Encapsulation request: It encapsulates user operations in a centralized manner for centralized control.
  • Resource isolation and throttling: It performs isolation from the corresponding resources based on specified types, such as thread pools and semaphores.

    • Counter throttling: For example, only 1,000 technical requests are allowed within 5 seconds. Throttle if the number is exceeded, and count again if the number is not exceeded.
    • Sliding window throttling: It solves the problem of inaccurate counters and splits a window into multiple rolling windows.
    • Token bucket flow throttling: It is similar to scenic spot ticketing. The ticketing speed is fixed. The request can be processed only with the token.
    • Leaky bucket throttling: A producer-consumer model realizing processing requests with constant speed and preventing burst traffic.
  • Fallback: A backup solution. If a request fails, do you have a backup solution to meet the requirements of the request?
  • Circuit breaker: The most important part. If the circuit breaker is open, all requests will fail and the fallback logic will be executed. If the circuit breaker is closed, the request will be executed normally. In some scenarios, we need to manually open the circuit breaker to force the degradation.
  • Metric monitoring: It monitors the lifecycle of requests. The status of requests, such as success, failure, timeout, and rejection, is monitored.

Pitfalls Encountered When Using Hystrix

  • Configuration can be dynamically adjusted according to the configuration center

Hystrix has a lot of configuration items. If it is not connected to the configuration center, all the configurations can only be modified in the code. It is difficult to deal with emergencies when the configuration is deployed in the cluster. Our project only sets up one CommandKey, and the others are specified in the configuration center. In case of emergencies, if some requests need to be isolated, it only needs to force the update after the modification in the configuration center.

  • In the rollback logic, you can use manual tracking or log output to generate alerts

When a request fails or times out, rollback logic will be executed. If a large number of rollbacks occur, it proves that some services go wrong. At this time, we can perform embedded operations in the rollback logic, report data to the monitoring system, or output rollback logs for centralized processing by the log collection program. All these methods can expose the problems and then alert through real-time data analysis.

  • Be careful when using ThreadLocal with thread pool isolation

When we use the thread pool isolation mode, the isolated method will be packaged as a Command and thrown into a separate thread pool for execution. At this time, when thread A is switched to thread B, the data of ThreadLocal will be lost.

  • Semaphore isolation is used more in Gateway

The gateway is the entry for all requests, and the number of services routed will be large, possibly ranging from dozens to hundreds. If thread pool isolation is used, hundreds of independent thread pools need to be created with huge overhead. However, the overhead of semaphore isolation is much smaller, which can also play a role in throttling.

Note: The timeout period of Hystrix is greater than that of Ribbon because Hystrix packages the request. It is especially important that if Ribbon turns on the retry mechanism, for example, if it retries 3 times, and the timeout period of Ribbon is 1 second, the timeout period of Hystrix should be greater than 3 seconds. Otherwise, Ribbon is still retrying, while Hystrix has timed out.

Sentinel

Sentinel is a traffic control, fusing, and degradation component of the cloud-native microservice. It can replace Hystrix to address issues such as service avalanche, service degradation, service fusing, and service throttling.

  • It can independently deploy the console components of Dashboard which is developed based on Spring Boot.
  • It does not rely on any framework or database and reduces code development. Through the UI interface configuration, it can complete fine-grained control.

10

Rich use scenarios: Sentinel has taken over the core traffic scenarios of Alibaba Double 11 Shopping Festival for nearly 10 years, such as the flash sale, message peak-load shifting, cluster traffic control, and real-time fuse for downstream unavailable applications.

Complete real-time monitoring: You can view the summary of clusters with a size of less than 500 and the second-level data of a single machine.

Extensive open-source ecology: It integrates with SpringCloud and Dubbo. You only need to introduce the corresponding dependencies and make a simple configuration to quickly connect to Sentinel.

Differences:

  • Hystrix allows a single request to try to fix itself, while Sentinel does not. Sentinel follows the time window. After the fuse is triggered, Sentinel rejects the request within the time window and resumes after the time window.
  • The rule data added to the Sentinel Dashboard is stored in the memory, and the rule data disappears when the microservice is stopped, which is inappropriate in the production environment. You can persist the Sentinel rule data in the Nacos configuration so that microservices can obtain it from Nacos.
# Sentinel Hystrix
Isolation Policy Semaphore isolation Thread pool isolation /semaphore isolation
Fuse and Degradation Policy Based on response time or failure ratio Based on the failure ratio
Real-time Metric Implementation Sliding window Sliding window (based on RxJava)
Scalability Multiple extension points In the form of plug-in
Throttling Based on QPS and throttling based on call relationships supported Not supported
Traffic Shaping Slow start and homogenizer mode supported Not supported
System Load Protection Supported Not supported
Console Out-of-the-box, rules configuration, second-level monitoring view, and machine discovery supported Not fully supported
Adaptation of Common Frameworks Servlet, SpringCloud, Dubbo, and gRPC Servlet and SpringCloud Netflix

Config / Nacos

Nacos is an open-source platform by Alibaba. It provides service discovery, configuration management, and service management for microservice architecture. Nacos is the combination of registry and configuration center (Nacos = Eureka + Config + Bus).

Features of Nacos:

  • Service discovery and health check
  • Dynamic configuration management
  • Dynamic DNS service
  • Services and metadata management

Protection Threshold:

When the number of healthy instances of service A / the total number of instances is less than the protection threshold, it proves that there are not so many healthy instances. At this time, the protection threshold will be triggered (status true), and Nacos will provide all the instance information (healthy and unhealthy) of the service for the consumer. The consumer may access the unhealthy instances and the request will fail, but this will be better than an avalanche. At the expense of some requests, the entire system is available.

Data model (domain model) of Nacos

  • Namespace represents different environments, such as development dev, test, and production environment prod.
  • Group represents a project, such as the Java Cloud project.
  • Service represents specific xxx services in a project.
  • DataId represents the specific xxx configuration file in a project.

You can update the configuration automatically by using the original SpringCloud annotation @RefreshScope.

Bus / Stream

SpringCloud Stream message-driven components help us build message-driven microservices more quickly and easily. The essential is that it shields the differences between different underlying MQ message middlewares, centralizes the MQ programming model, and reduces the cost of learning, developing, and maintaining MQ. Two types of messages are supported: Rabbit and Kafka.

Sleuth / Zipkin

End-to-end Tracing

11

Trace ID: when a request is sent to the entry of the distributed system, Sleuth creates a unique Trace ID. When the request is forwarded within the distributed system, the framework maintains the unique Trace ID until it is returned to the request.

Span ID: when the request reaches each service component, the unique Span ID is used to mark the beginning, specific process and ending of the request to count the time latency of each processing unit.

As a tracing service framework, SpringCloud Sleuth can track the call between services. Sleuth can record which services the service request goes through and how long it takes to process the service. According to these records, we can sort out the call relationship between microservices and perform problem tracing analysis.

Time consumption analysis: You can use Sleuth to know the time consumption of sampling requests and analyze service performance problems such as which service calls are more time-consuming.

Link optimization: you can find the service with frequent calls to perform targeted optimization.

Aggregation display: data information is sent to Zipkin for aggregation. Zipkin is used to store and display data.

Security Authentication

  • Session

It is one of the most commonly used methods of authentication and is also the simplest method. You can use NGINX sticky cookies and Redis centralized session storage to resolve the session loss problem.

  • HTTP Basic Authentication

The server verifies the header base64 encrypted Authorization, the username, and the password.

  • Token

A session is just a key. Session information is stored in the backend. The token stores user information and then uses an encryption algorithm to encrypt the information. Only the server can decrypt the information. After obtaining the token, the server decrypts the information to obtain the user information.

  • JWT Authentication

The JSON Web Token (JWT) user provides the user name and password to the authentication server, and the server verifies the legitimacy of the information submitted by the user. If the verification is successful, a Token will be generated and returned. The user can use this Token to access protected resources on the server.

12

  1. The authentication service provides an authentication API, verifies user information, and returns the authentication result.
  2. You can use the RSA algorithm in JWTUtils to generate a JWT token. The token encapsulates the user ID and validity period.
  3. Parameters between services are passed through the request header, and the context within the service is passed through ThreadLocal.
  4. If Hystrix causes ThreadLocal to fail, you can rewrite the Callable method of Hystrix to pass the required data.

Token Best Practices

  • Set a short (reasonable) expiration period.
  • Clear the deleted tokens promptly by putting them in Redis for filtering.

Although Token information cannot be modified, it can be processed by filtering at the authentication level.

  • Monitor the use frequency of tokens.

The most common method is to monitor the use frequency to prevent the data from being crawled by others because the access frequency of the crawler program is traceable.

  • You can use dynamic verification (verification code) to perform sensitive operations for core functions.

For example, the cash withdrawal requires that the verification code be verified again at the time of withdrawal to prevent the withdrawal from being operated by others.

  • Network environment and browser information can be identified.

Bank APPs have high requirements for the environment. If the network is disconnected during use, the APP will automatically log out and log in again, because the network environment is different from the previous one, and there are also some identification for browser information, which can be used to ensure the security of the backend API.

  • Encryption keys can be dynamically modified.

If the encryption key of the Token is leaked, it means that others can forge your Token and store the key in the configuration center to support dynamic modification and refresh. It should be noted that it is recommended to do the replacement operation when the traffic is at a low peak, otherwise the Token will all become invalid. All online requests will reapply for the Token, and the concurrency will be relatively large.

Canary release

Pain Points

  • A large number of services. Business changes frequently with a release per week.
  • The canary release can reduce the risk of release failures and reduce the impact.

Through canary release, some users can experience the new service first, or the test can only be tested by the tester. Then, release all the services after the functions go well, which can reduce the impact of release failure.

  • If a release fails, you can quickly roll back the release without affecting users.

If you find that there is a problem with this node after the canary release, you only need to roll back the node. Of course, it does not matter if you do not roll back the node. Through the canary release isolation, normal users will not be affected.

You can use the load balancing policy of Ribbon for canary release, and you can use more reliable discovery.

Discovery

It is an enterprise-level open-source microservice solution based on components such as service registration and discovery, Ribbon load balancing, Feign, and RestTemplate calls. It includes features such as canary release, canary routing, and service isolation.

13

  1. First, remove the services that need to be published from the forwarding process and publish them after the traffic is deleted.
  2. You can upgrade the version of some machines. By default, users still request the previous services and use the version to support test requests.
  3. After the test is completed, let the new version receive normal traffic, then deploy the next node. The preceding processes are repeated.
grayVersions = {"discovery-article-service":["1.01"]}

Multi-version Isolation

14

Local reuse test service: Highlights of Eureka Zone

Region: Geographical divisions, such as Beijing and Shanghai.

Zone: It can be simply understood as a specific computer room in the region.

In the process of calling, the same zone is preferentially selected to initiate the call. When no zone with the same name is found, other zones are selected to initiate the call. We can use this feature to solve the problem that multiple services need to be started locally.

Note: When you access the modified service A, this service depends on two services B and C. If B and C are not started locally, B and C will choose other zones to call if they cannot find the same zone, that is, the B and C services deployed in the test environment will be called to solve the problem of deploying multiple services locally.

Tuning of Each Component

When you perform stress testing on the gateway, you will find that the concurrency cannot be improved and the error rate is also high. Because you are using the default configuration, at this time we need to adjust the configuration to achieve the best effect.

First, we can tune the container. The most common is the built-in Tomcat container.


server.tomcat.accept-count // The number of requests in queue server.tomcat.max-threads // Maximum threads server.tomcat.max-connections // Maximum connections

This is the reason why the Hystrix semaphore isolation mode cannot increase its concurrency. The default value of semaphore is 100, that is, the maximum concurrency is only 100, and if it exceeds 100, you have to wait.

//Semaphore zuul.semaphore.max-semaphores // Semaphore: maximum concurrency // Thread pools hystrix.threadpool.default.coreSize // Maximum thread number hystrix.threadpool.default.maximumSize // The queue maximum size hystrix.threadpool.default.maxQueueSize // and other parameters

Configure gateway concurrency information


gateway.host. max -per-route-connections -// Connections per route gateway.host.max-total-connections // Total connections

Adjust the concurrency configuration of Ribbon

ribbon.MaxConnectionsPerHost. // Single service concurrency ribbon.MaxTotalConnections // Total concurrency

Modify the default HttpURLConnection of the Feign and replace it with httpclient to improve performance

feign.httpclient. max -connections-per-route -// Connections per route feign.httpclient.max-connections // Total connections

Implement dynamic routing by Gateway and configuration center

Implement dynamic logging by Feign and configuration center


Disclaimer: The views expressed herein are for reference only and don't necessarily represent the official views of Alibaba Cloud.

0 1 0
Share on

Alibaba Cloud Community

1,027 posts | 251 followers

You may also like

Comments