1.生产者(没有什么特殊性)

pom.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5.  
  6. <groupId>com.example</groupId>
  7. <artifactId>cloud-provider</artifactId>
  8. <version>0.0.1-SNAPSHOT</version>
  9. <packaging>jar</packaging>
  10.  
  11. <name>cloud-provider</name>
  12. <description>Demo project for Spring Boot</description>
  13.  
  14. <parent>
  15. <groupId>org.springframework.boot</groupId>
  16. <artifactId>spring-boot-starter-parent</artifactId>
  17. <version>2.0.6.RELEASE</version>
  18. <relativePath/> <!-- lookup parent from repository -->
  19. </parent>
  20.  
  21. <properties>
  22. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  23. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  24. <java.version>1.8</java.version>
  25. <spring-cloud.version>Finchley.SR2</spring-cloud.version>
  26. </properties>
  27.  
  28. <dependencies>
  29. <dependency>
  30. <groupId>org.springframework.boot</groupId>
  31. <artifactId>spring-boot-starter-web</artifactId>
  32. </dependency>
  33. <dependency>
  34. <groupId>org.mybatis.spring.boot</groupId>
  35. <artifactId>mybatis-spring-boot-starter</artifactId>
  36. <version>1.3.2</version>
  37. </dependency>
  38. <!--Service Discovery with Zookeeper-->
  39. <dependency>
  40. <groupId>org.springframework.cloud</groupId>
  41. <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
  42. </dependency>
  43. <dependency>
  44. <groupId>org.springframework.boot</groupId>
  45. <artifactId>spring-boot-devtools</artifactId>
  46. <scope>runtime</scope>
  47. </dependency>
  48. <dependency>
  49. <groupId>mysql</groupId>
  50. <artifactId>mysql-connector-java</artifactId>
  51. </dependency>
  52. <dependency>
  53. <groupId>org.projectlombok</groupId>
  54. <artifactId>lombok</artifactId>
  55. <optional>true</optional>
  56. </dependency>
  57. <dependency>
  58. <groupId>org.springframework.boot</groupId>
  59. <artifactId>spring-boot-starter-test</artifactId>
  60. <scope>test</scope>
  61. </dependency>
  62. </dependencies>
  63.  
  64. <dependencyManagement>
  65. <dependencies>
  66. <dependency>
  67. <groupId>org.springframework.cloud</groupId>
  68. <artifactId>spring-cloud-dependencies</artifactId>
  69. <version>${spring-cloud.version}</version>
  70. <type>pom</type>
  71. <scope>import</scope>
  72. </dependency>
  73. </dependencies>
  74. </dependencyManagement>
  75.  
  76. <build>
  77. <plugins>
  78. <plugin>
  79. <groupId>org.springframework.boot</groupId>
  80. <artifactId>spring-boot-maven-plugin</artifactId>
  81. <configuration>
  82. <fork>true</fork>
  83. </configuration>
  84. </plugin>
  85. </plugins>
  86. </build>
  87.  
  88. </project>

application.yml

  1. spring:
  2. datasource:
  3. driver-class-name: com.mysql.jdbc.Driver
  4. url: jdbc:mysql:///testdb?useSSL=true
  5. username: root
  6. password: 123
  7. cloud:
  8. zookeeper:
  9. connect-string: 192.168.3.201:2181
  10. application:
  11. name: provider
  12. mybatis:
  13. configuration:
  14. map-underscore-to-camel-case: true
  15. mapper-locations: classpath:mapper/*Mapper.xml
  16.  
  17. logging:
  18. level:
  19. com.example.cloudprovider.mapper: debug

实体类

  1. package com.example.cloudprovider.domain;
  2.  
  3. import lombok.Getter;
  4. import lombok.Setter;
  5.  
  6. import java.util.Date;
  7.  
  8. @Setter
  9. @Getter
  10. public class UserInfo {
  11. private Integer userId;
  12. private String userName;
  13. private int userAge;
  14. private Date userBirth;
  15. }

Mapper

  1. package com.example.cloudprovider.mapper;
  2.  
  3. import com.example.cloudprovider.domain.UserInfo;
  4.  
  5. public interface UserInfoMapper {
  6. UserInfo getUser(Integer userId);
  7. }

Mapper.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.example.cloudprovider.mapper.UserInfoMapper">
  6. <select id="getUser" resultType="com.example.cloudprovider.domain.UserInfo">
  7. select user_id, user_name, user_age, user_birth from t_user where user_id = #{userId}
  8. </select>
  9. </mapper>

Service接口

  1. package com.example.cloudprovider.service;
  2.  
  3. import com.example.cloudprovider.domain.UserInfo;
  4.  
  5. public interface UserService {
  6. UserInfo getUser(Integer userId);
  7. }

Service实现

  1. package com.example.cloudprovider.service.impl;
  2.  
  3. import com.example.cloudprovider.domain.UserInfo;
  4. import com.example.cloudprovider.mapper.UserInfoMapper;
  5. import com.example.cloudprovider.service.UserService;
  6. import org.springframework.stereotype.Service;
  7.  
  8. import javax.annotation.Resource;
  9.  
  10. @Service
  11. public class UserServiceImpl implements UserService {
  12.  
  13. @Resource
  14. private UserInfoMapper userMapper;
  15.  
  16. @Override
  17. public UserInfo getUser(Integer userId) {
  18. return userMapper.getUser(userId);
  19. }
  20. }

Controller

  1. package com.example.cloudprovider.controller;
  2.  
  3. import com.example.cloudprovider.domain.UserInfo;
  4. import com.example.cloudprovider.service.UserService;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.web.bind.annotation.GetMapping;
  7. import org.springframework.web.bind.annotation.PathVariable;
  8. import org.springframework.web.bind.annotation.RestController;
  9.  
  10. @RestController
  11. public class UserInfoController {
  12.  
  13. @Autowired
  14. private UserService userService;
  15.  
  16. @GetMapping("user/{id}")
  17. public UserInfo getUser(@PathVariable("id") Integer userId) {
  18. return userService.getUser(userId);
  19. }
  20. }

服务发布类

  1. package com.example.cloudprovider;
  2.  
  3. import org.mybatis.spring.annotation.MapperScan;
  4. import org.springframework.boot.SpringApplication;
  5. import org.springframework.boot.autoconfigure.SpringBootApplication;
  6.  
  7. @SpringBootApplication
  8. @MapperScan("com.example.cloudprovider.mapper") //扫描Mapper类 注入到Spring容器中
  9. public class CloudProviderApplication {
  10.  
  11. public static void main(String[] args) {
  12. SpringApplication.run(CloudProviderApplication.class, args);
  13. }
  14. }

2.消费者(引入feign框架)

pom.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5.  
  6. <groupId>com.example</groupId>
  7. <artifactId>cloud-consumer</artifactId>
  8. <version>0.0.1-SNAPSHOT</version>
  9. <packaging>jar</packaging>
  10.  
  11. <name>cloud-consumer</name>
  12. <description>Demo project for Spring Boot</description>
  13.  
  14. <parent>
  15. <groupId>org.springframework.boot</groupId>
  16. <artifactId>spring-boot-starter-parent</artifactId>
  17. <version>2.0.6.RELEASE</version>
  18. <relativePath/> <!-- lookup parent from repository -->
  19. </parent>
  20.  
  21. <properties>
  22. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  23. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  24. <java.version>1.8</java.version>
  25. <spring-cloud.version>Finchley.SR2</spring-cloud.version>
  26. </properties>
  27.  
  28. <dependencyManagement>
  29. <dependencies>
  30. <dependency>
  31. <groupId>org.springframework.cloud</groupId>
  32. <artifactId>spring-cloud-dependencies</artifactId>
  33. <version>${spring-cloud.version}</version>
  34. <type>pom</type>
  35. <scope>import</scope>
  36. </dependency>
  37. </dependencies>
  38. </dependencyManagement>
  39.  
  40. <dependencies>
  41. <!-- 引入feign依赖 -->
  42. <dependency>
  43. <groupId>org.springframework.cloud</groupId>
  44. <artifactId>spring-cloud-starter-openfeign</artifactId>
  45. </dependency>
  46.  
  47. <!--Service Discovery with Zookeeper-->
  48. <dependency>
  49. <groupId>org.springframework.cloud</groupId>
  50. <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
  51. </dependency>
  52.  
  53. <dependency>
  54. <groupId>org.springframework.boot</groupId>
  55. <artifactId>spring-boot-starter-web</artifactId>
  56. </dependency>
  57.  
  58. <dependency>
  59. <groupId>org.springframework.boot</groupId>
  60. <artifactId>spring-boot-devtools</artifactId>
  61. <scope>runtime</scope>
  62. </dependency>
  63. <dependency>
  64. <groupId>org.projectlombok</groupId>
  65. <artifactId>lombok</artifactId>
  66. <optional>true</optional>
  67. </dependency>
  68. <dependency>
  69. <groupId>org.springframework.boot</groupId>
  70. <artifactId>spring-boot-starter-test</artifactId>
  71. <scope>test</scope>
  72. </dependency>
  73. </dependencies>
  74.  
  75. <build>
  76. <plugins>
  77. <plugin>
  78. <groupId>org.springframework.boot</groupId>
  79. <artifactId>spring-boot-maven-plugin</artifactId>
  80. <configuration>
  81. <fork>true</fork>
  82. </configuration>
  83. </plugin>
  84. </plugins>
  85. </build>
  86.  
  87. </project>

application.yml

  1. spring:
  2. cloud:
  3. zookeeper:
  4. connect-string: 192.168.3.201:2181
  5. discovery:
  6. register: false #不会注册到zk中
  7.  
  8. provider: # 服务名称
  9. ribbon: # 负载均衡实现依靠ribbon
  10.   # 负载策略
  11. NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #随机策略 其他策略百度

实体类

  1. package com.example.cloudconsumer.vo;
  2.  
  3. import lombok.Getter;
  4. import lombok.Setter;
  5.  
  6. import java.util.Date;
  7.  
  8. @Getter
  9. @Setter
  10. public class UserVO {
  11. private Integer userId;
  12. private String userName;
  13. private Date userBirth;
  14. }

RestTemplate配置类

  1. package com.example.cloudconsumer.config;
  2.  
  3. import org.springframework.boot.SpringBootConfiguration;
  4. import org.springframework.cloud.client.loadbalancer.LoadBalanced;
  5. import org.springframework.context.annotation.Bean;
  6. import org.springframework.web.client.RestTemplate;
  7.  
  8. @SpringBootConfiguration
  9. public class RestTemplateConfiguration {
  10.  
  11. @Bean
  12. @LoadBalanced // Ribbon 负载均衡
  13. public RestTemplate restTemplate() {
  14. return new RestTemplate();
  15. }
  16. }

Controller

  1. package com.example.cloudconsumer.controller;
  2.  
  3. import com.example.cloudconsumer.vo.UserVO;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.web.bind.annotation.GetMapping;
  6. import org.springframework.web.bind.annotation.PathVariable;
  7. import org.springframework.web.bind.annotation.RestController;
  8. import org.springframework.web.client.RestTemplate;
  9.  
  10. @RestController
  11. public class UserWarpController {
  12. @Autowired
  13. private RestTemplate restTemplate;
  14.  
  15. // 调用只有一个或者多个服务实例API的情况下
  16. @GetMapping("warp/user/{userId}")
  17. public UserVO getUserData(@PathVariable("userId") Integer userId) {
  18. return restTemplate.getForObject("http://provider/user/"+userId, UserVO.class);
  19. }
  20. }

使用框架的Controller

  1. package com.example.cloudconsumer.controller;
  2.  
  3. import com.example.cloudconsumer.client.UserClient;
  4. import com.example.cloudconsumer.vo.UserVO;
  5. import org.springframework.web.bind.annotation.GetMapping;
  6. import org.springframework.web.bind.annotation.PathVariable;
  7. import org.springframework.web.bind.annotation.RestController;
  8.  
  9. import javax.annotation.Resource;
  10.  
  11. @RestController
  12. public class UserFeignController {
  13. @Resource
  14. private UserClient userClient;
  15.  
  16. // 调用只有一个或者多个服务实例API的情况下
  17. @GetMapping("feign/user/{userId}")
  18. public UserVO getUserData(@PathVariable("userId") Integer userId) {
  19. return userClient.getUserData(userId);
  20. }
  21. }

feign调用客户端

  1. package com.example.cloudconsumer.client;
  2.  
  3. import com.example.cloudconsumer.vo.UserVO;
  4. import org.springframework.cloud.openfeign.FeignClient;
  5. import org.springframework.web.bind.annotation.GetMapping;
  6. import org.springframework.web.bind.annotation.PathVariable;
  7.  
  8. /**
  9. * @FeignClient(name = "provider")
  10. * name为调用服务端的spring.application.name的值
  11. */
  12. @FeignClient(name = "provider")
  13. public interface UserClient {
  14. @GetMapping("user/{id}")
  15. public UserVO getUserData(@PathVariable("id") Integer userId);
  16. }

服务启动类:

  1. package com.example.cloudconsumer;
  2.  
  3. import org.springframework.boot.SpringApplication;
  4. import org.springframework.boot.autoconfigure.SpringBootApplication;
  5. import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
  6. import org.springframework.cloud.openfeign.EnableFeignClients;
  7.  
  8. @SpringBootApplication
  9. @EnableDiscoveryClient //可以发现ZK的服务
  10. @EnableFeignClients //可以发现feign的服务
  11. public class CloudConsumerApplication {
  12.  
  13. public static void main(String[] args) {
  14. SpringApplication.run(CloudConsumerApplication.class, args);
  15. }
  16. }

总结起来,feign框架可以理解成路由,对url进行再次包装后供给客户端调用,可以在这个路由上进行一系列限制操作,增强安全性。

SpingCloud之feign框架调用的更多相关文章

  1. Springcloud 整合Hystrix 断路器,支持Feign客户端调用

    1,在这篇博文中,已经大致说过了Springcloud服务保护框架 Hystrix在服务隔离,服务降级,以及服务熔断中的使用 https://www.cnblogs.com/pickKnow/p/11 ...

  2. Spring Cloud Alibaba(8)---Feign服务调用

    Feign服务调用 有关Spring Cloud Alibaba之前写过五篇文章,这篇也是在上面项目的基础上进行开发. Spring Cloud Alibaba(1)---入门篇 Spring Clo ...

  3. thinkphp框架调用类不存在的方法

    thinkphp框架调用类不存在的方法调用类不存在的方法,不会报错,但是也不会执行,这是根据tp框架里面的一个魔术方法,框架里面一共才十几个魔术方法

  4. SpringCloud(5)---Feign服务调用

    SpringCloud(5)---Feign服务调用 上一篇写了通过Ribbon进行服务调用,这篇其它都一样,唯一不一样的就是通过Feign进行服务调用. 注册中心和商品微服务不变,和上篇博客一样,具 ...

  5. Quartz框架调用——运行报错:ThreadPool class not specified

    Quartz框架调用——运行报错:ThreadPool class not specified 问题是在于Quartz框架在加载的时候找不到quartz.properties配置文件: 解决方案一: ...

  6. Quartz框架调用Demo

    Quartz框架调用Demo 任务调度在JAVA应用程序中运用的十分普遍,掌握QUARTZ是必备的技能; 官网:http://www.quartz-scheduler.org/ 下载最新1.80资源包 ...

  7. Spring Cloud Feign 在调用接口类上,配置熔断 fallback后,输出异常

    Spring Cloud Feign 在调用接口类上,配置熔断 fallback后,出现请求异常时,会进入熔断处理,但是不会抛出异常信息. 经过以下配置,可以抛出异常: 将原有ErrorEncoder ...

  8. Spring Boot使用Feign客户端调用远程服务时出现:timed-out and no fallback available,failed and no fallback available的问题解决

    timed-out and no fallback available: 这个错误基本是出现在Hystrix熔断器,熔断器的作用是判断该服务能不能通,如果通了就不管了,调用在指定时间内超时时,就会通过 ...

  9. java使用JNA框架调用dll动态库

    这两天了解了一下java调用dll动态库的方法,总的有三种:JNI.JNA.JNative.其中JNA调用DLL是最方便的. ·JNI ·JNA ·JNative java使用 JNI来调用dll动态 ...

随机推荐

  1. #ifdef 支持Mac #ifndef 支持Windows #if defined (Q_OS_WIN) 应该可以再两个系统通用

    //mac qt可以运行 #ifdef Q_OS_MAC qDebug()<<QSysInfo::MacintoshVersion; #endif //Mac不运行 #ifndef Q_O ...

  2. php-laravel中间件使用

    中间件使用 1.项目目录下cmd中php artisan make:middleware adminLogin,创建中间件 2.注册中间件(\Http\kernel.php) protected $r ...

  3. javaweb(十一)——使用Cookie进行会话管理

    一.会话的概念 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学曾 ...

  4. linux部署MantisBT(一)部署apache

    一.部署apache 1.下载apache安装包及依赖包 http://httpd.apache.org/download.cgi#apache24(apache2)http://apr.apache ...

  5. POJ 3278 Catch That Cow (附有Runtime Error和Wrong Answer的常见原因)

    题目链接:http://poj.org/problem?id=3278 Catch That Cow Time Limit: 2000MS   Memory Limit: 65536K Total S ...

  6. KRKR基础篇(二)

    这里介绍一些krkr的语法规范,具体的命令含义及用法以后再叙述 一:kag语法及基本概念 KAG使用的剧本语言为KAG Script,文件扩展名为.ks 脚本内的文字除  注释,  命令 ,  段落标 ...

  7. CSP201312-3:最大的矩形

    引言:CSP(http://www.cspro.org/lead/application/ccf/login.jsp)是由中国计算机学会(CCF)发起的"计算机职业资格认证"考试, ...

  8. PytorchZerotoAll学习笔记(四)--线性回归

    线性回归 # 导入 torch.torch.autograd的Variable模块import torch from torch.autograd import Variable # 生成需要回归需要 ...

  9. nginx原声方法按照每天日志切割保存

    首先配置日志变量,然后配置日志 在/etc/nginx/conf.d/default.conf 配置变量 server{ if ($time_iso8601 ~ "^(\d{4})-(\d{ ...

  10. JavaScript之函数柯里化

    什么是柯里化(currying)? 维基百科中的解释是:柯里化是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术.意思就是当函 ...