τα στοιχεία επικοινωνίας μου
Ταχυδρομείο[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Εάν υπάρχει μόνο ένας διακομιστής κέντρου εγγραφής, θα υπάρχει ένα μόνο σημείο αποτυχίας και δεν είναι δυνατή η επεξεργασία του με υψηλή ταυτόχρονη, επομένως απαιτείται σύμπλεγμα.
Προετοιμάστε τρεις EurekaServer για εγγραφή μεταξύ τους, πράγμα που σημαίνει ότι κάθε EurekaServer πρέπει να εγγραφεί σε όλους τους EureakServers, συμπεριλαμβανομένου του εαυτού του Κάθε EurekaServer λειτουργεί και ως διακομιστής και ως πελάτης. Οι άλλες μικρουπηρεσίες μας (παραγγελία, χρήστης) χρειάζεται μόνο να υποδείξουν τη διεύθυνση εγγραφής σε όλους τους EurekaServers.
Αυτό που χρησιμοποιείται εδώ είναι μια λειτουργική μονάδα Eureka, η οποία διαμορφώνει πολλά αρχεία yml για να επιτύχει το αποτέλεσμα της ομαδοποίησης.
- package org.example;
-
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
- import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
-
- /**
- * @ClassName EurekaStart
- * @Author 23
- * @Date 2024/7/10 19:12
- * @Version 1.0
- * @Description TODO
- **/
- @SpringBootApplication
- @EnableEurekaServer
- public class EurekaStart {
- public static void main(String[] args) {
- SpringApplication.run(EurekaStart.class,args);
- }
- }
- spring:
- profiles:
- active: peer3
- ---
- spring:
- profiles: peer1
- application:
- name: Eureka1
- eureka:
- instance:
- hostname: localhost
- client:
- serviceUrl:
- defaultZone: http://localhost:10070/eureka/
- server:
- port: 10070
- ---
- spring:
- profiles: peer2
- application:
- name: Eureka2
- eureka:
- instance:
- hostname: localhost
- client:
- serviceUrl:
- defaultZone: http://localhost:10071/eureka/
- server:
- port: 10071
- ---
- spring:
- profiles: peer3
- application:
- name: Eureka3
- eureka:
- instance:
- hostname: localhost
- client:
- serviceUrl:
- defaultZone: http://localhost:10072/eureka/
- server:
- port: 10072
- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.example</groupId>
- <artifactId>Springcloud-Netflix</artifactId>
- <version>1.0-SNAPSHOT</version>
- </parent>
-
- <artifactId>Eureka-Service</artifactId>
- <packaging>jar</packaging>
-
- <name>Eureka-Service</name>
- <url>http://maven.apache.org</url>
-
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- </properties>
-
- <dependencies>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>3.8.1</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-test</artifactId>
- </dependency>
- <!-- Eureka服务端支持 -->
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
- </dependency>
- </dependencies>
- </project>
Για την παροχή ταυτόχρονης λειτουργίας, μερικές φορές ο ίδιος πάροχος υπηρεσιών μπορεί να αναπτύξει πολλαπλές (υπηρεσίες εμπορευμάτων). Αυτός ο πελάτης πρέπει να ολοκληρώσει την κλήση φόρτωσης σύμφωνα με μια συγκεκριμένη στρατηγική υπεύθυνης εξισορρόπησης κατά την κλήση.
- spring:
- profiles:
- active: order2
- ---
- server:
- port: 10010
- spring:
- profiles: order1
- application:
- name: order-service
- eureka:
- client:
- service-url:
- defaultZone: http://localhost:10072/eureka
- instance:
- prefer-ip-address: true
- ---
- server:
- port: 10012
- spring:
- profiles: order2
- application:
- name: order-service
- eureka:
- client:
- service-url:
- defaultZone: http://localhost:10072/eureka
- instance:
- prefer-ip-address: true
Μέσω του RestTmplate, ολοκληρώστε την κλήση υπηρεσίας με url
Εφαρμογή κώδικα (από πλευράς καταναλωτή υπηρεσιών):
- package org.example.Controller;
-
- import org.example.domain.Order;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.cloud.client.ServiceInstance;
- import org.springframework.cloud.client.discovery.DiscoveryClient;
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.PathVariable;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
- import org.springframework.web.client.RestTemplate;
-
- import java.util.Arrays;
- import java.util.List;
-
- /**
- * @ClassName UserController
- * @Author 23
- * @Date 2024/7/10 18:52
- * @Version 1.0
- * @Description TODO
- **/
- @RestController
- @RequestMapping("/User")
- public class UserControllerrlb {
- @Autowired
- private RestTemplate restTemplate;
- // @Autowired
- // private DiscoveryClient discoveryClient;
- @GetMapping("/getOrder/{id}")
- public List<Order> getOrderById(@PathVariable("id") Integer id) {
- // Order[] order = restTemplate.getForObject("http://localhost:10010/OrderService/user/" + id, Order[].class);
- // return Arrays.asList(order);
- // List<ServiceInstance> instances=discoveryClient.getInstances("order-service");//通过服务的名字去获取服务实例
- // ServiceInstance serviceInstance=instances.get(0);//定死只获取第一个服务实例对象
- // String ip=serviceInstance.getHost();//获取服务对象ip
- // int port=serviceInstance.getPort();//获取获取的实例对象的服务端口号
- Order[] orders=restTemplate.getForObject("http://Order-Service/OrderService/user/"+id,Order[].class);
- return Arrays.asList(orders);
-
- }
- }
Το Ribbon είναι ένα έργο ανοιχτού κώδικα υπηρεσίας μεσαίου επιπέδου cloud που κυκλοφόρησε από το Netflix. Η κύρια λειτουργία του είναι να παρέχει αλγόριθμο εξισορρόπησης φορτίου πελάτη. Το στοιχείο πελάτη Ribbon παρέχει μια σειρά από πλήρη στοιχεία διαμόρφωσης, όπως λήξη χρόνου σύνδεσης, επανάληψη, κ.λπ. Με απλά λόγια, το Ribbon είναι ένα πρόγραμμα εξισορρόπησης φορτίου πελάτη Μπορούμε να αναφέρουμε όλα τα μηχανήματα πίσω από τον εξισορροπητή φορτίου στο αρχείο διαμόρφωσης και το Ribbon θα σας βοηθήσει αυτόματα να συνδεθείτε βάσει ορισμένων κανόνων (όπως απλή δημοσκόπηση, τυχαίες συνδέσεις, κ.λπ.). μηχανών, μπορούμε εύκολα να χρησιμοποιήσουμε το Ribbon για να εφαρμόσουμε προσαρμοσμένους αλγόριθμους εξισορρόπησης φορτίου. Το Ribbon είναι ένα πρόγραμμα εξισορρόπησης φόρτου πελάτη που μπορεί να ολοκληρώσει κλήσεις εξισορρόπησης φορτίου για πολλαπλές παρουσίες υπηρεσίας μιας υπηρεσίας σύμφωνα με ορισμένους κανόνες Αυτοί οι κανόνες υποστηρίζουν επίσης την προσαρμογή.
Σχηματικός:
Το OpenFeign είναι ένα δηλωτικό πρόγραμμα-πελάτη της υπηρεσίας Web, σκοπός του οποίου είναι να διευκολύνει τις κλήσεις της Υπηρεσίας Ιστού. Το Feign παρέχει ένα πρότυπο διεπαφής για αιτήματα HTTP (η διεύθυνση πρόσβασης επισημαίνεται σε αυτό γράφοντας μια απλή διεπαφή και εισάγοντας σχολιασμούς, μπορείτε να ορίσετε τις παραμέτρους, τη μορφή, τη διεύθυνση και άλλες πληροφορίες του αιτήματος HTTP). Το OpenFeign θα εκτελεί πλήρως τα αιτήματα HTTP μεσολάβησης (δυναμικό διακομιστή μεσολάβησης). Χρειάζεται μόνο να το καλέσουμε ως μέθοδο για την ολοκλήρωση του αιτήματος υπηρεσίας και της σχετικής επεξεργασίας. Το Feign ενσωματώνει το Ribbon και το Hystrix (θα μιλήσουμε για το Hystrix αργότερα), έτσι ώστε να μην χρειάζεται πλέον να χρησιμοποιούμε ρητά αυτά τα δύο συστατικά.
Διαμορφώνοντας διαφορετικές υποκατηγορίες IRule, μπορείτε να επιλέξετε διαφορετικές στρατηγικές εξισορρόπησης φορτίου, δηλαδή να επιλέξετε μια υπηρεσία από τη λίστα υπηρεσιών με μια συγκεκριμένη στρατηγική για να ολοκληρώσετε την κλήση. Φυσικά μπορεί και να προσαρμοστεί. Επομένως, οι στρατηγικές εξισορρόπησης φορτίου μπορούν να χωριστούν σε ενσωματωμένες και προσαρμοσμένες.