Springcloud的搭建主要包括三个部分:服务注册中心、服务提供者、服务消费者。每一个部分都是一个springboot项目,它们通过配置文件(application.properties或application.yml)关联在一起。
一、创建服务注册中心
1、 按照如下过程依次操作
2、 在application.properties中填写如下内容,声明本服务是一个注册中心
server.port:7770
eureka.instance.hostname:localhost
#一下两行表明本服务是一个注册中心,而非服务提供或者消费方
eureka.client.registerWithEureka: false
eureka.client.fetchRegistry: false#服务注册到哪里
eureka.client.serviceUrl.defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
#本服务的名称
spring.application.name: eurka-server
3、 在启动类上面添加@EnableEurekaServer注解即可
4、 启动服务即可,注意服务端口是application.properties中配置的server.port
二、创建服务提供者
1、 类似注册中心创建springboot,只是以下这个地方有些不同。
2、 在application.properties中进行注册信息的配置
#本服务端口号
server.port: 7771
#本服务名
spring.application.name: hello-springcloud-service
#注册中心的地址
eureka.client.serviceUrl.defaultZone: http://localhost:7770/eureka/
注:服务名可以重复,会认为是同一个服务,负载均衡使用
3、 在启动类上面添加@EnableEurekaClient注解
4、 创建VO,用于接收参数
1) VO类的属性名要与参数名完全一致
2) 提供setter/getter方法
3)Get和Post接收的vo不要共用一个,最好分着设计
5、 创建Controller
1) 本质上就是ssh中创建controller一样,注解使用@RestController
2) 写出这个请求是get还是post请求
3) 返回值类型可以是字符串或者map、List等类型都是可以的
4) 参数注意事项
A) 如果是get请求,可以使用VO这个pojo类接收,也可以通过“类型 参数名”这种方式接收(普通类型的参数接收而已)。
最正规的方式是:@RequestParam(“参数名”) 类型 参数名这种方式。
B) 如果是post请求,必须使用VO这个pojo类的方式接收,由于传递的是json字符串,所以必须使用@RequestBody修饰。而且,只能有一个@RequestBody。
例如:@RequestBody PoJo类 pojo类的对象
此外,如果请求中除了一个json字符串以外,还有其他参数,那么json字符串用@RequestBody的方式接收,而其余参数参考get的方式接收即可。
5) 该Controller不仅可以作为其他服务的提供者,也可以直接通过前端请求。只是注意post请求的特殊处理。
packagecom.lennar.serviceprovider.controller;
importcom.lennar.serviceprovider.vo.GetVO;
importcom.lennar.serviceprovider.vo.HelloWorldTestVO;
importorg.springframework.beans.factory.annotation.Value;
importorg.springframework.web.bind.annotation.*;
importjava.util.ArrayList;
importjava.util.HashMap;
importjava.util.List;
importjava.util.Map;
@RestController
public classMyController{
@Value("${server.port}")
Stringport;//负载均衡的时候便于打印识别是哪个服务(端口不同,服务不同)
//1.get请求
//1.1.返回字符串
@RequestMapping(value = "/test/getMethod1", method = RequestMethod.GET)
publicStringgetMethod1(GetVOgetVO) {
return"get-字符串(RequestMapping):hello " + getVO.getStudentName() + " ,I am from
port:" + port;
}
//
public String getMethod1(@RequestParam(value = "studentName")
String name) {
// return "get-字符串(RequestMapping):hello " + name + " ,I am from port:" + port;
// }
@GetMapping(value = "/test/getMethod2")
publicStringgetMethod2(@RequestParam(value = "studentName") Stringname) {
return"get-字符串(GetMapping):hello
" + name + "
,I am from port:" + port;
}
//1.2.返回Map
@RequestMapping(value = "/test/getMethod3", method = RequestMethod.GET)
publicMap getMethod3(@RequestParam(value = "studentName") Stringname) {
Map map = newHashMap<>();
map.put("resultMessage", "get-Map(RequestMapping):hello " + name
+ " ,I am from port:" + port);
returnmap;
}
@GetMapping(value = "/test/getMethod4")
publicMap getMethod4(@RequestParam(value = "studentName") Stringname) {
Map map = newHashMap<>();
map.p