在上篇博文中,我們已經通過阿里的腳手架創建了註冊中心與服務者,本篇博文我們將介紹在消費者工程中請求服務者。
首先我們來創建一個消費者,消費者的創建方式與服務者一致,這裏不再多做贅述。(小夥伴們可以參考上篇博文消費者的創建)
爲了做到演示效果,我們首先在服務者工程中創建一個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);
}
}
啓動成功後,訪問消費者的請求接口,便可成功看到服務者的數據