SpringCloud实战三:组件通信

Hello大家好,我是初晨,本章我们学习SpringCloud 组件间通信。大家有问题和意见可以发邮箱mr_beany@163.com

一:创建一个SpringCloud Client

创建过程与 SpringCloud 实战二:Client的创建和高可用 一样

我这里服务名称叫Servce,大家随意创建

创建好的服务结构和配置文件如下

SpringCloud实战三:组件通信

配置端口为8083

SpringCloud实战三:组件通信

先后启动Eureka,Client和Servce

访问 http://localhost:8761/

SpringCloud实战三:组件通信

新创建的servce服务已经注册成功

二:创建Controller

在servce服务中创建ServerController

package com.example.server.controller;

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

@RestController
public class ServerController {

    @GetMapping("getMsg")
    public String getMsg(){
        return "This is ServerMsg";
    }
}
复制代码

三:使用RestTemplate的方式

1:创建ClientController.java

package com.chuchen.client.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class ClientController {

    @GetMapping("/getServerResult")
    public String getServerResult(){
        return restTemplate.getForObject("http://localhost:8083/getMsg",String.class);
    }
}复制代码

重新启动服务,浏览器输入

http://localhost:8081/getServerResult

SpringCloud实战三:组件通信

我们可以看到从Client服务,调用servce服务的返回结果

2:优化

我们前面说到,SpringCloud个组件是高可用的,我们每个服务有可能布置多个服务,甚至在不同机器上,可能服务的IP和端口都不一样,我们上面这种方式明显不符合我们的需求,那么怎么优化呢?

1:创建config→RestTemplateConfig.java

package com.chuchen.client.config;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;

@Component
public class RestTemplateConfig {

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}
复制代码

2:修改ClientController.java

package com.chuchen.client.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class ClientController {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/getServerResult")
    public String getServerResult(){
        //其中 SERVER 为需要请求的服务的名称
        return restTemplate.getForObject("http://SERVER/getMsg",String.class);
    }
}
复制代码

重新启动服务,浏览器输入

http://localhost:8081/getServerResult

SpringCloud实战三:组件通信

我们可以看到仍然是可以得到请求结果的。

四:使用openfeign

1:引入openfeign依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>复制代码

2:启动类添加@EnableFeignClients

SpringCloud实战三:组件通信

3:创建client→ServerClient

package com.chuchen.client.client;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

//name属性的值为需要调用的组件名称
@FeignClient(name = "server")
public interface ServerClient {

    //需要调用的方法
    @GetMapping("/getMsg")
    String getMsg();
}
复制代码

4:修改ClientController

package com.chuchen.client.controller;

import com.chuchen.client.client.ServerClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ClientController {

    @Autowired
    private ServerClient serverClient;

    @GetMapping("/getServerResult")
    public String getServerResult(){
        return serverClient.getMsg();
    }
}
复制代码

5:测试

重新启动服务,浏览器输入

http://localhost:8081/getServerResult

SpringCloud实战三:组件通信

五:结尾

感谢大家支持,系列文章接下来陆续更新,感谢大家。

对于springBoot还不了解的朋友可以看我的SpringBoot系列教程

原文 

https://juejin.im/post/5cff0d016fb9a07ee95865cf

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » SpringCloud实战三:组件通信

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址