演示项目源码下载:(访问密码:9987)
Spring-Cloud-Consoul.zip
了解如何创建微服务的基础上Spring cloud
,对登记HashiCorp Consul
注册服务器,以及如何等微服务(客户发现的),用它来注册和发现服务来调用其API。
我们将使用基于 Spring Boot 的 Spring Cloud API。我们将使用 Consul 注册服务器来构建服务注册服务器和通用发现客户端,这些客户端将注册自己并发现其他服务以调用 REST API。
consul.exe
. 我们将在此处启动命令提示符并使用以下命令启动代理。 consul agent -server -bootstrap-expect=1 -data-dir=consul-data -ui -bind=192.168.6.1
ipconfig
在命令提示符知道你的IPv4地址,并在这里使用它。@org.springframework.cloud.client.discovery.EnableDiscoveryClient
在src
文件夹中存在的 Spring boot 应用程序类上添加注释。有了这个注解,这个工件将像一个 spring 发现客户端,并将在附加到这个服务的领事服务器中注册自己。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class SpringCloudConsulStudentApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudConsulStudentApplication.class, args);
}
}
application.properties
并添加以下属性
server.port=9098
spring.application.name: student-service
management.security.enabled=false
这是每个属性的详细信息 –
server.port=9098
– 将在默认9098端口启动服务。spring.application.name: student-service
– 将使用student-service
标签在领事服务器中注册自己,其他服务也将使用此名称自行查找此服务。management.security.enabled=false
– 本练习实际上并不需要,但它将禁用执行器模块提供的管理端点中的弹簧安全性。RestController
并公开一个 rest 端点,用于获取特定学校的所有学生详细信息。在这里,我们公开/getStudentDetailsForSchool/{schoolname}
端点以服务于业务目的。为简单起见,我们对学生的详细信息进行了硬编码。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.example.howtodoinjava.springcloudconsulstudent.domain.Student;
@RestController
public class StudentServiceController {
private static Map<String, List<Student>> schooDB = new HashMap<String, List<Student>>();
static {
schooDB = new HashMap<String, List<Student>>();
List<Student> lst = new ArrayList<Student>();
Student std = new Student("Sajal", "Class IV");
lst.add(std);
std = new Student("Lokesh", "Class V");
lst.add(std);
schooDB.put("abcschool", lst);
lst = new ArrayList<Student>();
std = new Student("Kajal", "Class III");
lst.add(std);
std = new Student("Sukesh", "Class VI");
lst.add(std);
schooDB.put("xyzschool", lst);
}
@RequestMapping(value = "/getStudentDetailsForSchool/{schoolname}", method = RequestMethod.GET)
public List<Student> getStudents(@PathVariable String schoolname) {
System.out.println("Getting Student details for " + schoolname);
List<Student> studentList = schooDB.get(schoolname);
if (studentList == null) {
studentList = new ArrayList<Student>();
Student std = new Student("Not Found", "N/A");
studentList.add(std);
}
return studentList;
}
}
Student.java 模型
public class Student {
private String name;
private String className;
public Student(String name, String className) {
super();
this.name = name;
this.className = className;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
}
student-service
在 Consul Agent 控制台中看到一个条目。/getStudentDetailsForSchool/{schoolname}
端点是否已启动并正在运行。转到浏览器并转到http://localhost:9098/getStudentDetailsForSchool/abcschool,它将提供特定学校abcschool的学生详细信息。@org.springframework.cloud.client.discovery.EnableDiscoveryClient
在src
文件夹中存在的 Spring boot 应用程序类上添加注释。有了这个注解,这个工件将像一个 spring 发现客户端,并将在附加到这个服务的领事服务器中注册自己。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@EnableDiscoveryClient
@SpringBootApplication
public class SpringCloudConsulSchoolApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudConsulSchoolApplication.class, args);
}
}
看上面的代码。在 中StudentServiceDelegate
,我们曾经RestTemplate
调用过学生服务并将学生服务的 URL 用作.http://student-service/getStudentDetailsForSchool/{schoolname}
consul
这里提供的服务器和休息模板。@LoadBalanced
如果多个实例正在为同一服务运行,我们也可以在此处应用负载平衡(请参阅注释)。java -jar "-Dserver.port=9099 target\spring-cloud-consul-student-0.0.1-SNAPSHOT.jar
@LoadBalanced
RestTemplate
一旦我们注册了多个服务和多个实例,领事服务器就会看起来像这样。
@EnableDiscoveryClient
和 Consul 代理运行是应用程序生态系统的核心。没有这两件事就根本行不通。演示项目源码下载:(访问密码:9987)
Spring-Cloud-Consoul.zip
https://www.leftso.com/article/859.html