SpringCloud-服务消费者(Ribbon)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wuliu_forever/article/details/79036354

1、POM

<parent>
        <groupId>com.xxx</groupId>
        <artifactId>xxx</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <artifactId>xxx-webapi</artifactId>
    <name>xxx-webapi</name>
    <url>http://maven.apache.org</url>

    <dependencies>
        <dependency>
            <groupId>com.xxx</groupId>
            <artifactId>xxx-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!-- json start -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.1.15</version>
        </dependency>

        <dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
            <version>2.3</version>
            <classifier>jdk15</classifier>
        </dependency>

        <!-- gson -->
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
        </dependency>
        <!-- json end -->

        <!-- ribbon消费者springcloud jar start -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-ribbon</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- ribbon消费者springcloud jar end -->

    </dependencies>

    <build>
        <finalName>xxx-webapi</finalName>

        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
                    <executable>true</executable>
                </configuration>
            </plugin>
        </plugins>
    </build>

2、启动类

@SpringBootApplication
@EnableDiscoveryClient
public class WebApiApplication {
    
    private static final Logger log = LoggerFactory.getLogger(WebApiApplication.class);
    
    public static void main(String[] args) {
        log.info("**********接口中心启动-开始**********");
        try {
            SpringApplication.run(WebApiApplication.class, args);
            log.info("**********接口中心启动-成功**********");
        }
        catch (Throwable e) {
            log.info("**********接口中心启动-失败**********");
        }
    }
    
    @Bean//向程序的ioc注入一个bean
    @LoadBalanced//表明这个restRemplate开启负载均衡的功能
    RestTemplate restTemplate() {
        return new RestTemplate();
    }
    
}

3、配置

#项目系统配置start
#默认端口
server.port=9002
#系统服务名称
spring.application.name=xxx-webapi
#注册中心
eureka.client.serviceUrl.defaultZone=http://admin:123456@localhost:9502/eureka/
#表示是否将自己注册到Eureka Server
eureka.client.registerWithEureka=false
#表示是否从Eureka Server获取注册信息
eureka.client.fetchRegistry=true

#服务调用超时
#请求处理的超时时间(默认5s)
ribbon.ReadTimeout=5000
#请求连接的超时时间(默认2s)
ribbon.ConnectTimeout=2000
#对所有操作请求都进行重试
hello-service.ribbon.OkToRetryOnAllOperations=false
#对当前实例的重试次数
ribbon.MaxAutoRetries=0
#切换实例的重试次数
ribbon.MaxAutoRetriesNextServer=0

#LOG
logging.file=./logs/log.log
#日志级别
logging.level.org.springframework=DEBUG

#项目系统配置end

#服务地址列表start*********************************
#银行卡认证服务
auth.url=http://xxx-provider/bankcard/auth


#服务地址列表end*********************************


#系统常量配置start*********************************

#系统常量配置end*********************************

4、demo

@RestController
@RequestMapping("/user")
public class UserController {
    
    private static final Logger log = LoggerFactory.getLogger(UserController.class);
    
    @Autowired
    private RibbonCommonService ribbonCommonService;
    @Value("${auth.url}")
    private String authUrl;
    
    @RequestMapping(value = "/auth", method = RequestMethod.POST)
    public Object bankCardFourElementAuth(HttpServletRequest request,@RequestParam Map<String, Object> map) {
       xxxResVo resVo = new xxxResVo();
        log.info("接口请求参数:{}", map);
        try {
            //......
            String result = ribbonCommonService.ribbonPost(reqVo, authUrl);
            log.info("银行卡四要素认证请求返回信息:{}", result);
           //......
        }
        catch (Throwable e) {
            log.error("xxxxxx系统异常", e);
          //......
        }
        log.info("银行卡四要素认证接口返回信息:{}", resVo);
        return resVo;
    }
}


public interface RibbonCommonService {
    
    /**
     * ribbon-post请求服务方式(baseReqVo)
     *
     * @version 2018年1月4日下午12:43:58
     * @author wuliu
     * @param params
     * @param url
     * @return
     */
    public String ribbonPost(BaseReqVo baseReqVo, String url);
    
    /**
     * ribbon-post请求服务方式(map)
     *
     * @version 2018年1月4日下午12:43:58
     * @author wuliu
     * @param params
     * @param url
     * @return
     */
    public String ribbonPost(Map<String,Object> params, String url);
}

@Service
public class RibbonCommonServiceImpl implements RibbonCommonService{
    
    @Autowired
    private RestTemplate restTemplate;
    
    @Override
    public String ribbonPost(BaseReqVo baseReqVo, String url) {
        HttpHeaders headers = new HttpHeaders();
        MediaType type =  MediaType.parseMediaType("application/json; charset=UTF-8");
        headers.setContentType(type);
        headers.set("Connection", "Close");
        headers.add("Accept", MediaType.APPLICATION_JSON.toString());
        JSONObject jsonObj = JSONObject.fromObject(baseReqVo);
        HttpEntity<String> formEntity = new HttpEntity<String>(jsonObj.toString(), headers);
        String result = restTemplate.postForObject(url, formEntity, String.class);
        return result;
    }
    
    @Override
    public String ribbonPost(Map<String, Object> params, String url) {
        HttpHeaders headers = new HttpHeaders();
        MediaType type =  MediaType.parseMediaType("application/json; charset=UTF-8");
        headers.setContentType(type);
        headers.set("Connection", "Close");
        headers.add("Accept", MediaType.APPLICATION_JSON.toString());
        JSONObject jsonObj = JSONObject.fromObject(params);
        HttpEntity<String> formEntity = new HttpEntity<String>(jsonObj.toString(), headers);
        String result = restTemplate.postForObject(url, formEntity, String.class);
        return result;
    }

}



猜你喜欢

转载自blog.csdn.net/wuliu_forever/article/details/79036354