springcloud-day01使用RestTRestTemplate + eureka实现远程调用

springcloud 使用RestTemplate 远程调用

  • 注册中心(eureka)搭建
  • 服务提供者搭建
  • 消费者搭建
<!--父工程依赖-->
<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.SR2</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

注册中心

// 非常简单 配置类加上@EnableEurekaServer注解就行了
@SpringBootApplication
@EnableEurekaServer
public class EurekaMain {
    public static void main(String[] args) {
        SpringApplication.run(EurekaMain.class, args);
    }
}

依赖

<!--eureka服务端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

application.yml

server:
  port: 10086
eureka:
  instance:
    ip-address: 127.0.0.1         # 应用实例IP
  client:
    register-with-eureka: false   # 是否将自己注册到eureka中
    fetch-registry: false         # 是否从eureka中获取信息
    service-url:                  # 注册中心地址
      defaultZone: http://127.0.0.1:10086/eureka/

服务提供者

// 非常简单 配置类加上@EnableEurekaClient注解注册服务
@SpringBootApplication
@EnableEurekaClient
public class ApplicationMain {
    public static void main(String[] args) {
        SpringApplication.run(ApplicationMain.class, args);
    }
}

暴露访问路由

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;
    @Value("${port}")
    private String port;
    @RequestMapping("/find/{id}")
    public User findById(@PathVariable(value = "id") Integer id){
        System.out.println("服务被调用: "+port);
        return userService.findById(id);
    }
}

服务端依赖

 <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--eureka客户端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

服务端application.yml

# 配置应用基本信息和DB
server:
  port: ${port}
spring:
  application:
    name: eureka-client-provider  # 配置应用名称可以让消费者通过名称找到调用者
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    password: root
    url: jdbc:mysql://127.0.0.1:3306/day25?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
    username: root
# 配置eureka server
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka

消费者

@SpringBootApplication
@EnableEurekaClient // eureka客户端
@EnableCircuitBreaker // 熔断处理开启
public class ApplicationWebMain {
    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(ApplicationWebMain.class, args);
    }
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

消费者代码

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private RestTemplate restTemplate;

    @RequestMapping("/find/{id}")
    @HystrixCommand(fallbackMethod = "findUserByIdFallbackMethod")	// 指定熔断(调用服务者失败)时的处理
    public String findUserById(@PathVariable(value = "id") Integer id){
        String url = "http://eureka-client-provider/user/find/" + id;
        return restTemplate.getForObject(url,String.class);
    }
	
	// 访问服务提供者失败后执行
    public String findUserByIdFallbackMethod(@PathVariable(value = "id") Integer id){
        return "findUserByIdFallbackMethod return String";
    }
}

消费端依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--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-hystrix</artifactId>
</dependency>

消费端application.yaml

# 配置应用基本信息
server:
  port: 8080
spring:
  application:
    name: eureka-client-consumer
# 配置eureka server
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka
eureka-client-provider: # 服务名称
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule	# 改变负载均衡策略为随机,默认轮询

什么垃圾文章 自己看了都想抽自己耳光

posted @ 2021-01-26 21:37  笨蛋树上笨蛋果  阅读(115)  评论(0编辑  收藏  举报