informasi kontak saya
Surat[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Jika hanya ada satu server pusat registrasi, maka akan terjadi satu titik kegagalan dan tidak dapat diproses dengan konkurensi tinggi, sehingga diperlukan cluster.
Siapkan tiga EurekaServer untuk mendaftar satu sama lain, artinya setiap EurekaServer harus mendaftar dengan semua EureakServer, termasuk dirinya sendiri. Layanan mikro kami yang lain (pesanan, pengguna) hanya perlu mengarahkan alamat pendaftaran ke semua Server Eureka.
Yang digunakan di sini adalah modul Eureka, yang mengonfigurasi beberapa file yml untuk mencapai efek pengelompokan.
- 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>
Untuk menyediakan konkurensi, terkadang penyedia layanan yang sama dapat menyebarkan beberapa (layanan komoditas). Klien ini harus menyelesaikan panggilan beban sesuai dengan strategi penyeimbangan tertentu yang bertanggung jawab saat melakukan panggilan.
- 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
Melalui RestTmplate, selesaikan panggilan layanan dengan url
Implementasi kode (sisi konsumen layanan):
- 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 adalah proyek open source layanan lapisan tengah cloud yang dirilis oleh Netflix. Fungsi utamanya adalah menyediakan algoritma penyeimbangan beban klien. Komponen klien Ribbon menyediakan serangkaian item konfigurasi lengkap, seperti batas waktu koneksi, coba lagi, dll. Sederhananya, Ribbon adalah penyeimbang beban klien. Kita dapat mencantumkan semua mesin di belakang penyeimbang beban di file konfigurasi, dan Ribbon akan secara otomatis membantu Anda terhubung berdasarkan aturan tertentu (seperti polling sederhana, koneksi acak, dll.) Untuk ini mesin, kita dapat dengan mudah menggunakan Ribbon untuk mengimplementasikan algoritma penyeimbangan beban khusus. Ribbon adalah penyeimbang beban klien yang dapat menyelesaikan panggilan penyeimbangan beban untuk beberapa contoh layanan dari suatu layanan sesuai dengan aturan tertentu.
Skema:
OpenFeign adalah klien Layanan Web deklaratif yang tujuannya adalah membuat panggilan Layanan Web menjadi lebih mudah. Feign menyediakan templat antarmuka untuk permintaan HTTP (alamat akses ditandai di atasnya). Dengan menulis antarmuka sederhana dan memasukkan anotasi, Anda dapat menentukan parameter, format, alamat, dan informasi lain dari permintaan HTTP. OpenFeign akan sepenuhnya mem-proxy (proksi dinamis) permintaan HTTP. Kita hanya perlu memanggilnya seperti metode untuk menyelesaikan permintaan layanan dan pemrosesan terkait. Feign mengintegrasikan Ribbon dan Hystrix (kita akan membicarakan Hystrix nanti), sehingga kita tidak perlu lagi menggunakan kedua komponen ini secara eksplisit.
Dengan mengonfigurasi subkelas IRule yang berbeda, Anda dapat memilih strategi penyeimbangan beban yang berbeda, yaitu memilih layanan dari daftar layanan dengan strategi khusus untuk menyelesaikan panggilan. Tentu saja bisa juga disesuaikan. Oleh karena itu, strategi penyeimbangan beban dapat dibagi menjadi strategi bawaan dan strategi khusus.