一、搭建消费者服务
(1)创建服务消费者模块
(2)导入依赖
<?xml version="1.0" encoding="UTF-8"?>
<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">
<parent>
<artifactId>springcloud</artifactId>
<groupId>com.buba</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>springcloud-consumer</artifactId>
<!-- 主要引入实体类和web依赖-->
<dependencies>
<dependency>
<groupId>org.example</groupId>
<artifactId>springcloud-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
(3)application.yml配置
二、编写消费者
(1)消费者要想访问远程服务,需要使用RestTemplate类,所以把RestTemplate交给Spring管理,这里使用java代码方式。
package com.buba.springcloud.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
/**
* @Configuration 相当于applicationContext.xml
*/
@Configuration
public class ConfigBean {
/**
* 把RestTemplate对象交给Spring管理
* @return
*/
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
(2)编写Controller层
package com.buba.springcloud.controller;
import com.buba.springcloud.pojo.Dept;
import org.springframework.beans.factory.annotation.Autowired;
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.List;
@RestController
public class DeptConsumerController {
// 消费者不应该有Service层,使用RestTemplate调用Service。RestTemplate封装了多种访问Http请求的类。
private RestTemplate restTemplate;
private static final String REST_URL_PREFIX = "http://localhost:8001";
@RequestMapping("/consumer/dept/get/{deptId}")
public Dept get(@PathVariable("deptId") long deptId) {
// 传递的参数可以使用map进行封装、可以直接在路径上拼接、可以使用实体类传递
return restTemplate.getForObject(REST_URL_PREFIX + "/dept/get/", Dept.class, deptId);
}
@RequestMapping("/consumer/dept/add")
public boolean add(Dept dept) {
return restTemplate.postForObject(REST_URL_PREFIX + "/dept/addDept", dept, Boolean.class);
}
@RequestMapping("/consumer/dept/list")
public List<Dept> list() {
return restTemplate.getForObject(REST_URL_PREFIX + "/dept/list", List.class);
}
@Autowired
public void setRestTemplate(RestTemplate restTemplate) {
this.restTemplate = restTemplate;
}
}
三、编写启动类测试
package com.buba.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DeptConsumer_80 {
public static void main(String[] args) {
SpringApplication.run(DeptConsumer_80.class, args);
}
}
先启动提供方,在启动消费方
输入地址,因为端口号80是默认端口号,所以可以省略。
访问成功。