在上篇博文中,我们已经通过阿里的脚手架创建了注册中心与服务者,本篇博文我们将介绍在消费者工程中请求服务者。
首先我们来创建一个消费者,消费者的创建方式与服务者一致,这里不再多做赘述。(小伙伴们可以参考上篇博文消费者的创建)
为了做到演示效果,我们首先在服务者工程中创建一个controller,代码如下:
package com.example.server;
import org.apache.log4j.Logger;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
/**
* Created by Administrator on 2020/4/27.
*/
@RestController
public class ServerDemo {
private final Logger logger = Logger.getLogger(getClass());
@RequestMapping(value = "add")
public Map service(String userId){
Map m =new HashMap();
m.put("id",userId);
logger.info("执行了这里.");
return m;
}
}
然后,修改消费者工程的启动类
package com.example.costom;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
@EnableDiscoveryClient
public class CostomApplication {
public static void main(String[] args) {
SpringApplication.run(CostomApplication.class, args);
while (true){
try {
Thread.sleep(Integer.MAX_VALUE);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
@Bean
@LoadBalanced
RestTemplate restTemplate(){
return new RestTemplate();
}
}
要注意,
@Bean @LoadBalanced RestTemplate restTemplate(){ return new RestTemplate(); }
这几行代码是为了向程序的ioc注入一个bean: restTemplate;并通过@LoadBalanced注解表明这个restRemplate开启负载均衡的功能。如果不加这几行代码,消费者端无法通过服务名请求消费者
现在我们来编写消费者端的请求代码
package com.example.costom;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import java.util.HashMap;
import java.util.Map;
/**
* Created by Administrator on 2020/4/27.
*/
@RestController
public class CostomDemo {
private final Logger logger = Logger.getLogger(getClass());
@Autowired
RestTemplate restTemplate;
@RequestMapping(value = "query")
public Map query(String id){
Map m =new HashMap();
m.put("id",id);
logger.info("执行了这里.");
//下面这个地址就是服务端的 服务名称+新建的controller的开放接口...
return restTemplate.getForObject("http://SERVER/add?userId="+id,Map.class);
}
}
启动成功后,访问消费者的请求接口,便可成功看到服务者的数据