SpringCloud之服务提供和服务调用的搭建

 

 

pom文件:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.toov5</groupId>
  <artifactId>member</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.1.RELEASE</version>
	</parent>
	<!-- 管理依赖 -->
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Finchley.M7</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>
	<dependencies>
		<!-- SpringBoot整合Web组件 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!-- SpringBoot整合eureka客户端 -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
		</dependency>
	</dependencies>
	<!-- 注意: 这里必须要添加, 否者各种依赖有问题 -->
	<repositories>
		<repository>
			<id>spring-milestones</id>
			<name>Spring Milestones</name>
			<url>https://repo.spring.io/libs-milestone</url>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</repository>
	</repositories>
  
</project>

 yml文件:

###服务启动端口号
server:
  port: 8000
###服务名称(服务注册到eureka名称)  
spring:
    application:
        name: app-toov5-member
###服务注册到eureka地址
eureka:
  client:
    service-url:
    ##当前会员注册到eureka服务  地址+端口号 
           defaultZone: http://127.0.0.1:8100/eureka
            
###因为该应用为注册中心,不会注册自己   这里 这两个可以不写
    register-with-eureka: true
###是否需要从eureka上获取注册信息
    fetch-registry: true

  controller类

package com.toov5.api.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MemberApiController {
    @RequestMapping("/getMember")
  public String getMember() {
        return "会员服务";
  }
}

启动类

package com.toov5.api.app;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication
@EnableEurekaClient   //注册到eureka
public class AppMember {
   
    public static void main(String[] args) {
        SpringApplication.run(AppMember.class, args);
    }
    
}  

 先启动eureka,再启动服务:

上面Eureka会帮助生成地址~ 

(通过获取服务名字 然后获取访问地址)

 

服务调用:

客户端调用工具  SpringCloud里面有rest  Spring boot帮助整合的,底层封装了Http Client  默认整合了ribbon负载均衡器

                             feign(spring cloud里面的)  

解决RestTemplate注册到spring boot 容器中 @bean 方式

如果使用RestTemplate 方式以别名方式进行调用,依赖Ribbon负载均衡器   @LoadBalanced

@LoadBalanced就能让这个RestTemplate在请求时拥有客户端负载均衡的能力 

yml:

###服务启动端口号
server:
  port: 8001
###服务名称(服务注册到eureka名称)  
spring:
    application:
        name: app-toov5-order
###服务注册到eureka地址
eureka:
  client:
    service-url:
           defaultZone: http://localhost:8100/eureka

           
###因为该应用为注册中心,不会注册自己这里 这两个可以不写
register-with-eureka: true ###是否需要从eureka上获取注册信息 fetch-registry: true

  controller

package com.toov5.api.controller;

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;

@RestController
public class OrderController {

    @Autowired
    private RestTemplate restTemplate;

    @RequestMapping("/getOrder")
    // 订单服务调用会员服务
    public String getOrder() {
        // 一种直接调用,一种服务别名调用
//        String result = restTemplate.getForObject("http://localhost:8000/getMember", String.class);
        String url ="http://app-toov5-order/getMember"; //使用别名去注册中心找对应服务调用地址
        String result = restTemplate.getForObject(url, String.class);
        System.out.println("订单服务调用会员服务result" + result);
        return result;
    }
}

启动类

package com.toov5.api.controller;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
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
@EnableEurekaClient
public class AppOrder {
  public static void main(String[] args) {
    SpringApplication.run(AppOrder.class, args);
}
  //解决RestTemplate找不到问题  把restTemplate注册到Spring Boot容器中 如果要使用别名 必须加  @LoadBalanced
  @Bean
  @LoadBalanced
  RestTemplate restTemplate() {  
      return new RestTemplate();
  }
  
}

两个都启动后有两个服务了

访问之,

 

可以多启动几个Member服务,可以实现本地负载均衡哦~~轮询机制~

启动,两个服务:

 

posted @ 2018-11-12 20:16  toov5  阅读(391)  评论(0编辑  收藏  举报