springcloud服務發現(ribbon)
服務註冊:http://blog.csdn.net/qq_40075229/article/details/78978853
1.新建maven(war)項目:springcloud-ribbonclient
pom.xml添加依賴:spring-cloud-starter-ribbon
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- eureka:服務註冊 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<!-- ribbon:服務發現 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
</dependencies>
2.src/main/resources目錄下新建application.yml
該文件配置:
server:
port: 8088
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
spring:
application:
name: ribbonclient
#服務名不能帶"_",多個相同的服務的服務名要相同
#配置賦值均衡算法
#被調用的服務的服務名
SENDMAIL:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
BestAvailableRule 選擇一個最小的併發請求的server
AvailabilityFilteringRule 過濾掉那些因爲一直連接失敗的被標記爲circuit tripped的後端server,並過濾掉那些高併發的的後端server(active connections 超過配置的閾值)
WeightedResponseTimeRule 根據相應時間分配一個weight,相應時間越長,weight越小,被選中的可能性越低。
RetryRule 對選定的負載均衡策略機上重試機制。
RoundRobinRule roundRobin方式輪詢選擇server
RandomRule 隨機選擇一個server
ZoneAvoidanceRule 複合判斷server所在區域的性能和server的可用性選擇server
3.添加配置類MyConfiguration
@Configuration
public class MyConfiguration {
//RestTemplate:調用服務
@LoadBalanced
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
4.新建contrller:SendController
@RestController
public class SendController {
@Autowired
private RestTemplate restTemplate;
//測試負載均衡
/* @Autowired
private LoadBalancerClient loadBalancer;
@RequestMapping("choosePub")
public String choosePub() {
StringBuffer sb=new StringBuffer();
for(int i=0;i<=10;i++) {
ServiceInstance ss=loadBalancer.choose("SENDMAIL");//從兩個sendmail中選擇一個 這裏涉及到選擇算法
sb.append(ss.getUri().toString()+"<br/>");
}
return sb.toString();
} */
//在springcloud-ribben服務中調用springcloud-sendemail的發送郵件服務
@PostMapping("/mail")
public String sendMail(String send_to,String send_subject,String send_content){
String results =null;
try {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
Map<String, Object> map = new HashMap<String, Object>();
map.put("send_to", send_to);
map.put("send_subject", send_subject);
map.put("send_content", send_content);
HttpEntity<Map<String, Object>> request = new HttpEntity<>(map, headers);
//調用SENDMAIL服務中的發送郵件服務
results = restTemplate.postForObject("http://SENDMAIL/psend", request, String.class);
} catch (Exception e) {
return "發送失敗";
}
return results;
}
}
5.webapp目錄新建 send.html
<form action="/mail" method="post">
郵件接收人:<input type="text" name="send_to" value="郵件接收人的郵箱"><br/>
郵件主題:<input type="text" name="send_subject" value="柒個我"><br/>
郵件內容:<textarea rows="40" cols="50" name="send_content" >柒個不一樣的我</textarea><br>
<input type="submit" value="提交">
</form>
6.啓動類:Main
@RibbonClient(value="SENDMAIL") //表示當前服務需要調用的其他服務的名稱
@EnableEurekaClient //該註解繼承了@EnableDiscoveryClient
@SpringBootApplication //該註解繼承了@Configuration
public class Main {
public static void main(String[] args) {
SpringApplication.run(Main.class, args);
}
}
程序啓動順序: springcloud-eurekaserver-->springboot-sendemail-->springcloud-ribbonclient
瀏覽器訪問:http://localhost:8088/send.html 點擊提交
頁面出現發送成功,則代表服務調用服務成功
1.新建maven(war)項目:springcloud-ribbonclient
pom.xml添加依賴:spring-cloud-starter-ribbon
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- eureka:服務註冊 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<!-- ribbon:服務發現 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
</dependencies>
2.src/main/resources目錄下新建application.yml
該文件配置:
server:
port: 8088
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
spring:
application:
name: ribbonclient
#服務名不能帶"_",多個相同的服務的服務名要相同
#配置賦值均衡算法
#被調用的服務的服務名
SENDMAIL:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
BestAvailableRule 選擇一個最小的併發請求的server
AvailabilityFilteringRule 過濾掉那些因爲一直連接失敗的被標記爲circuit tripped的後端server,並過濾掉那些高併發的的後端server(active connections 超過配置的閾值)
WeightedResponseTimeRule 根據相應時間分配一個weight,相應時間越長,weight越小,被選中的可能性越低。
RetryRule 對選定的負載均衡策略機上重試機制。
RoundRobinRule roundRobin方式輪詢選擇server
RandomRule 隨機選擇一個server
ZoneAvoidanceRule 複合判斷server所在區域的性能和server的可用性選擇server
3.添加配置類MyConfiguration
@Configuration
public class MyConfiguration {
//RestTemplate:調用服務
@LoadBalanced
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
4.新建contrller:SendController
@RestController
public class SendController {
@Autowired
private RestTemplate restTemplate;
//測試負載均衡
/* @Autowired
private LoadBalancerClient loadBalancer;
@RequestMapping("choosePub")
public String choosePub() {
StringBuffer sb=new StringBuffer();
for(int i=0;i<=10;i++) {
ServiceInstance ss=loadBalancer.choose("SENDMAIL");//從兩個sendmail中選擇一個 這裏涉及到選擇算法
sb.append(ss.getUri().toString()+"<br/>");
}
return sb.toString();
} */
//在springcloud-ribben服務中調用springcloud-sendemail的發送郵件服務
@PostMapping("/mail")
public String sendMail(String send_to,String send_subject,String send_content){
String results =null;
try {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
Map<String, Object> map = new HashMap<String, Object>();
map.put("send_to", send_to);
map.put("send_subject", send_subject);
map.put("send_content", send_content);
HttpEntity<Map<String, Object>> request = new HttpEntity<>(map, headers);
//調用SENDMAIL服務中的發送郵件服務
results = restTemplate.postForObject("http://SENDMAIL/psend", request, String.class);
} catch (Exception e) {
return "發送失敗";
}
return results;
}
}
5.webapp目錄新建 send.html
<form action="/mail" method="post">
郵件接收人:<input type="text" name="send_to" value="郵件接收人的郵箱"><br/>
郵件主題:<input type="text" name="send_subject" value="柒個我"><br/>
郵件內容:<textarea rows="40" cols="50" name="send_content" >柒個不一樣的我</textarea><br>
<input type="submit" value="提交">
</form>
6.啓動類:Main
@RibbonClient(value="SENDMAIL") //表示當前服務需要調用的其他服務的名稱
@EnableEurekaClient //該註解繼承了@EnableDiscoveryClient
@SpringBootApplication //該註解繼承了@Configuration
public class Main {
public static void main(String[] args) {
SpringApplication.run(Main.class, args);
}
}
程序啓動順序: springcloud-eurekaserver-->springboot-sendemail-->springcloud-ribbonclient
瀏覽器訪問:http://localhost:8088/send.html 點擊提交
頁面出現發送成功,則代表服務調用服務成功
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.