Spring的RestTemplate(RPC和HTTP)

 服务调用方式

1 . 目标

  • 理解RPC和HTTP的区别
  • 能使用RestTemplate发送请求

2.  讲解

1 . RPC和HTTP

常见远程调用方式:

RPC:(Remote Produce Call)远程过程调用

1.基于Socket
2.自定义数据格式
3.速度快,效率高
4.典型应用代表:Dubbo,WebService,ElasticSearch集群间互相调用
HTTP:网络传输协议
1.基于TCP/IP
2.规定数据传输格式
3.缺点是消息封装比较臃肿、传输速度比较慢
4.优点是对服务提供和调用方式没有任何技术限定,自由灵活,更符合微服务理念
RPC和HTTP的区别:RPC是根据语言API来定义,而不是根据基于网络的应用来定义。

2. Http客户端工具

常见Http客户端工具:HttpClient、OKHttp、URLConnection。

 Spring的RestTemplate

(1)RestTemplate介绍

  • RestTemplate是Rest的HTTP客户端模板工具类
  • 对基于Http的客户端进行封装
  • 实现对象与JSON的序列化与反序列化
  • 不限定客户端类型,目前常用的3种客户端都支持:HttpClient、OKHttp、JDK原生URLConnection(默认方式)

(2)RestTemplate入门案例

Spring的RestTemplate(RPC和HTTP)_第1张图片

我们可以使用RestTemplate实现上图中的请求,springcloud-day1-resttemplate通过发送请求,请求springcloud-day1-provider/user/list方法。

(1)搭建springcloud-day1-provider

这里不演示详细过程了,大家直接使用IDEA搭建一个普通的SpringBoot工程即可。

坐标
 

com.itheima
springcloud-day1-provider
0.0.1-SNAPSHOT


pom.xml依赖



	org.springframework.boot
	spring-boot-starter-parent
	2.1.6.RELEASE
	 



	
	
		org.springframework.boot
		spring-boot-starter-web
	

创建com.itheima.domain.User

public class User implements Serializable {
    private String name;
    private String address;
    private Integer age;

    public User() {
    }

    public User(String name, String address, Integer age) {
        this.name = name;
        this.address = address;
        this.age = age;
    }
    
    //..get set toString 略
    
}

application.properties

server.port=18081

创建com.itheima.controller.UserController,代码如下:

@RestController
@RequestMapping(value = "/user")
public class UserController {

    /***
     * 提供服务
     * @return
     */
    @RequestMapping(value = "/list")
    public List list(){
        List users = new ArrayList();
        users.add(new User("王五", "深圳", 25));
        users.add(new User("李四", "北京", 23));
        users.add(new User("赵六", "上海", 26));
        return users;
    }
}

创建启动类,并启动工程

@SpringBootApplication
public class SpringcloudDay1ProviderApplication {
	public static void main(String[] args) {
		SpringApplication.run(SpringcloudDay1ProviderApplication.class, args);
	}
}

访问:效果如下:

Spring的RestTemplate(RPC和HTTP)_第2张图片

(2)创建springcloud-day1-resttemplate

创建的详细过程也不讲解了,直接使用IDEA创建一个SpringBoot工程即可。

pom.xml依赖



	org.springframework.boot
	spring-boot-starter-parent
	2.1.6.RELEASE
	 



	
	
		org.springframework.boot
		spring-boot-starter-web
	

	
	
		org.springframework.boot
		spring-boot-starter-test
		test
	

创建启动类,并在启动类中创建RestTemplate对象

@SpringBootApplication
public class SpringcloudDay1ResttemplateApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringcloudDay1ResttemplateApplication.class, args);
	}

	/***
	 * @Bean:创建一个对象实例,并将对象交给Spring容器管理
	 * 
	 * @return
	 */
	@Bean
	public RestTemplate restTemplate(){
		return  new RestTemplate();
	}
}

测试

在测试类HttpDemoApplicationTests中@Autowired注入RestTemplate

通过RestTemplate的getForObject()方法,传递url地址及实体类的字节码

RestTemplate会自动发起请求,接收响应

并且帮我们对响应结果进行反序列化

代码如下:

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringcloudDay1ResttemplateApplicationTests {
	@Autowired
	private RestTemplate restTemplate;

	/****
	 * RestTemplate远程调用
	 */
	@Test
	public void testRestTemplateQuery() {
		String url = "http://localhost:18081/user/list";
		String result = restTemplate.getForObject(url, String.class);
		System.out.println(result);
	}
}

运行测试方法,效果如下:

Spring的RestTemplate(RPC和HTTP)_第3张图片

3 小结

  • RPC和HTTP的区别:RPC是根据语言API来定义,而不是根据基于网络的应用来定义。

  • RestTemplate:

①RestTemplate是Rest的HTTP客户端模板工具类。

②对基于Http的客户端进行封装。

③实现对象与JSON的序列化与反序列化。

④不限定客户端类型

 

你可能感兴趣的:(SpringCloud)