RestTemplate与Ribbon简单使用

RestTemplate

RestTemplate是访问rest 接口的对象,提供相应的访问方法

配置创建RestTemplate

@Configuration
public class RestTemplateConfiguration {
    @Bean
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
}

创建三个测试访问的uri

@RestController
public class DemoController {
	@GetMapping("/demo/data")
	public Foo getData(@RequestParam("name") String name) {
	    Foo foo = new Foo();
	    foo.setId(1);
	    foo.setName(name);
		return foo;
	}
	
	@GetMapping("/demo/data/{name}")
	public String getData2(@PathVariable("name") String name) {
	    return name + "plus";
	}
	
	@PostMapping("/data/save")
	public long addData(@RequestBody Foo foo) {
		System.out.println(foo.getName());
		return 10001;
	}
}

RestTemplate调用

@RestController
public class RestTemplateController {
	@Autowired
	private RestTemplate restTemplate;
	
	@GetMapping("/call/data")
	public Foo getData(@RequestParam("name") String name) {
		Foo result = restTemplate.getForObject("http://localhost:8080/demo/data?name=" + name, Foo.class);
		return result;
	}
	
	@GetMapping("/call/data/{name}")
	public String getData2(@PathVariable("name") String name) {
		String result = restTemplate.getForObject("http://localhost:8080/demo/data/{name}", String.class, name);
	    return result + "call back";
	}
	
	@GetMapping("/call/data3")
	public Foo getData3(@RequestParam("name") String name) {
		ResponseEntity<Foo> entity = restTemplate.getForEntity("http://localhost:8080/demo/data?name=" + name, Foo.class);
		System.out.println(entity.getStatusCodeValue());
		Foo result = entity.getBody();
		return result;
	}
	
	@GetMapping("/call/data/save")
	public long addDataTest() {
		Foo foo = new Foo();
	    foo.setId(1);
	    foo.setName("test");
	    long result = restTemplate.postForObject("http://localhost:8080/data/save", foo, Long.class);
		return result;
	}
}

Ribbon

在这里插入图片描述

Ribbon是正向代理,代理客户端向服务器发起请求,这里代理后,进行负载均衡功能

引入依赖,Ribbon需要依赖于注册中心eureka

		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
		</dependency>

添加配置项,修改配置文件application.properties

eureka.client.serviceUrl.defaultZone=http://192.168.0.102:8761/eureka

修改RestTemplate对象的创建,添加注解@LoadBalanced

@Configuration
public class RestTemplateConfiguration {
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate() {
        return new RestTemplate();
    }
}

调用rest接口,将ip和端口换成应用注册名称,如下eureka-provider-app

	@GetMapping("/call/loadbalanced")
	public String loadBalanced() {
		String result = restTemplate.getForObject("http://eureka-provider-app/hello", String.class);
		return result;
	}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值