2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Jos rekisteröintikeskuksen palvelin on vain yksi, vika on vain yksi, eikä sitä voida käsitellä suurella samanaikaisuudella, joten tarvitaan klusteri.
Valmistele kolme EurekaServeriä rekisteröitymään toisiinsa, mikä tarkoittaa, että jokaisen EurekaServerin on rekisteröidyttävä kaikkiin EurekaServereihin, mukaan lukien itsensä. Jokainen EurekaServer toimii sekä palvelimena että asiakkaana. Muiden mikropalveluidemme (tilaus, käyttäjä) tarvitsee vain osoittaa rekisteröintiosoite kaikkiin EurekaServereihin.
Tässä käytetään Eureka-moduulia, joka määrittää useita yml-tiedostoja klusteroinnin vaikutuksen saavuttamiseksi.
- 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>
Samanaikaisuuden takaamiseksi sama palveluntarjoaja voi joskus ottaa käyttöön useita (hyödykepalveluja). Tämän asiakkaan on suoritettava kuormituskutsu tietyn vastuullisen tasapainotusstrategian mukaisesti soittaessaan.
- 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
Suorita palvelupuhelu RestTmplaten kautta URL-osoitteella
Koodin käyttöönotto (palvelun kuluttajapuoli):
- 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 on Netflixin julkaisema avoimen lähdekoodin pilvipalveluprojekti. Sen päätehtävänä on tarjota asiakkaan kuormantasausalgoritmi. Ribbon-asiakaskomponentti tarjoaa joukon täydellisiä määrityskohteita, kuten yhteyden aikakatkaisun, uudelleenyrityksen jne. Yksinkertaisesti sanottuna, Ribbon on asiakaskuormituksen tasapainottaja. Voimme luetella kaikki kuormantasaajan takana olevat koneet konfiguraatiotiedostossa, ja Ribbon auttaa sinua automaattisesti muodostamaan yhteyden tiettyjen sääntöjen mukaisesti (kuten yksinkertainen kysely, satunnaiset yhteydet jne.). koneita, voimme helposti käyttää Ribbonia mukautettujen kuormituksen tasapainotusalgoritmien toteuttamiseen. Ribbon on asiakaskuormituksen tasapainotin, joka voi suorittaa kuormituksen tasauskutsuja palvelun useille palveluesiintymille tiettyjen sääntöjen mukaisesti.
Kaavio:
OpenFeign on deklaratiivinen Web Service -asiakas, jonka tarkoituksena on helpottaa Web Service -puheluita. Feign tarjoaa käyttöliittymämallin HTTP-pyynnöille (pääsyosoite on merkitty siihen kirjoittamalla yksinkertainen käyttöliittymä ja lisäämällä huomautuksia), voit määrittää HTTP-pyynnön parametrit, muodon, osoitteen ja muut tiedot. OpenFeign välittää (dynaamiset välityspalvelimet) HTTP-pyynnöt kokonaan. Meidän tarvitsee vain kutsua sitä palvelupyynnön ja siihen liittyvän käsittelyn suorittamiseksi. Feign integroi Ribbonin ja Hystrixin (puhumme Hystrixistä myöhemmin), joten meidän ei enää tarvitse käyttää näitä kahta komponenttia eksplisiittisesti.
Konfiguroimalla erilaisia IRule-alaluokkia voit valita erilaisia kuormituksen tasapainotusstrategioita, eli valita palveluluettelosta tietyn strategian sisältävän palvelun puhelun suorittamiseksi. Tietysti se voidaan myös räätälöidä. Siksi kuormituksen tasapainotusstrategiat voidaan jakaa sisäänrakennettuihin ja mukautettuihin strategioihin.