4.0.0
spring-cloud-microservice
org.example
1.0-SNAPSHOT
com.example
microservice-cloud-consumer-dept-80
0.0.1-SNAPSHOT
microservice-cloud-consumer-dept-80
Demo project for Spring Boot
1.8
org.example
microservice-cloud-api
1.0-SNAPSHOT
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-tomcat
org.springframework.boot
spring-boot-devtools
runtime
true
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-starter-jetty
org.springframework
springloaded
1.2.8.RELEASE
org.apache.logging.log4j
log4j-core
ch.qos.logback
logback-core
org.springframework.boot
spring-boot-maven-plugin
org.projectlombok
lombok
server:
port: 80
RestTemplate 是一种简单便捷的访问 restful 服务模板类,是 Spring 提供的用于访问 Rest 服务的客户端模板工具集,提供了多种便捷访问远程 HTTP 服务的方法
package com.example.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class ConfigBean {
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
restTemplate已经简化了底层通信的方法,只是为了高效开发才有了Feign这样的组件
package com.example.controller;
import com.zk.springcloud.entity.Dept;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
import java.util.List;
@RestController
public class DeptConsumerController {
//这种方式是直调用服务方的方法,根本没有用到 Spring Cloud
private static final String REST_URL_PROVIDER_PREFIX = "http://localhost:8001";
//RestTemplate 是一种简单便捷的访问 restful 服务模板类,是 Spring 提供的用于访问 Rest 服务的客户端模板工具集,提供了多种便捷访问远程 HTTP 服务的方法
// 消费者不应该有service层,只要在controller中获取到provider的请求地址即可访问服务
//RestTemplate....供我们直接调用就可以了!注册到spring中
//(String url, Class responseType, Map uriVariables)亲求实体
@Autowired
private RestTemplate template;
//不同于rpc那种DubboReference引用服务提供者的service,rpc是 接口调用 通过 反射
//获取指定部门信息
@GetMapping("/consumer/dept/get/{id}")
public Dept getDeptById(@PathVariable("id") Integer id){
return template.getForObject(REST_URL_PROVIDER_PREFIX+"/dept/get/"+id,Dept.class);
}
//获取部门列表
@GetMapping("/consumer/dept/list")
public List getDepts(){
return template.getForObject(REST_URL_PROVIDER_PREFIX+"/dept/list",List.class);
}
@RequestMapping("/consumer/dept/add")
public boolean addDept(Dept dept){
return template.postForObject(REST_URL_PROVIDER_PREFIX+"/dept/add",dept,Boolean.class);
}
}
在消费者中通过http访问其他微服务的控制层,这样完成多服务器服务解耦(因为可以更换访问路径)
参数可以通过3中方式传输,一种是分装成map,一种是实体类,另一种是在url路径携带
测试,先启动服务提供者的启动类,然后在启动服务消费者的启动类
访问http://127.0.0.1/consumer/dept/list测试结果