美文网首页
微服务以及SpringCloud的搭建

微服务以及SpringCloud的搭建

作者: employeeeee | 来源:发表于2019-02-12 10:41 被阅读0次

公司做新一年计划的时候提到了微服务,以前也总听过微服务,但并没有去了解究竟是什么,放假前查阅了一下相关的资料,做了一个简单的测试,记录一下.

我理解的微服务就是一种不同的分割方式,以前是按照service,dao,domain,controller来分层的,而微服务是可以通过功能来进行分割的,而且分割出来的功能越简单越好,最多两周内可以修改翻新的.然后可以通过调用某一个服务,来实现微服务这样的一个功能,我测试使用的是springcloud,springcloud是很多服务的一个合集,所以不可避免的就出现了版本影响的问题,在官网中有这样的一个描述
Finchley builds and works with Spring Boot 2.0.x, and is not expected to work with Spring Boot 1.5.x.
这个是针对Finchley版本的,针对其他版本的springcloud也是一样的,需要注意你引用的spingboot的版本,不然启动不起来,也不会有什么报错.

而微服务中存在的角色有三种,服务端,客户端,注册中心

  • 服务端: 用来提供服务的
  • 客户端: 用来引用服务端所提供的服务
  • 注册中心: 客户端和服务端在注册中心 进行注册 然后进行调用

我在做测试的时候,第一个测试是没有引入springcloud的,只是两个服务之间的一个调用
新建项目cloud-demo
然后新建module,cloud-service-demo
项目结构如下

image.png

没有引入数据库 比较懒 就下了一个servicecontroller
是在list中加入了一条信息

@Service
public class TestServiceImpl implements TestService {


    @Override
    public List<Map<String, String>> testService()
    {
        List<Map<String,String>> list = new ArrayList<>();
        Map<String,String> map = new HashMap<String, String>();
        map.put("testKey","微服务的一个测试");
        list.add(map);
        return list;
    }
}

server-port是在yml文件中配置的 配置为1000

然后在新建module cloud-client-demo用来调用service的服务
项目结构如下

image.png

因为用到了 restTemplate 所以要在配置类中,声明一下.

@Configuration
public class CilentApplication {

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        RestTemplate restTemplate = new RestTemplate();
        return restTemplate;
    }
}

然后在controller中直接引用就可以了

@RestController
public class ClientController {
    @Resource
    private RestTemplate restTemplate;

    @RequestMapping("/index")
    public String clientTest(){
        ResponseEntity<String> responseEntity = restTemplate.getForEntity("http://localhost:1000/index",String.class);
        String result = responseEntity.getBody();
        return result;
    }

这里我只写了一个客户端,实际是可以写多个 然后通过ngix来解决高并发问题的,但是如果微服务数量很多的时候,这种直接调用的方式,还是会有缺陷的,所以就使用了eureka
新建module
spring-cloud-eureka-server
pom文件引入

    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>2.0.1.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            <version>2.1.0.RELEASE</version>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.SR2</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <repositories>
        <repository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/libs-snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>

下边的是整个项目的pom文件


    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.2.RELEASE</version>
        <relativePath/>
    </parent>


    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.SR2</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

然后需要在yml文件中进行配置

eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

然后将之前写的 服务端 和 客户端 进行注册

eureka:
  client:
    service-url:
      defaultZone: http://localhost:3000/eureka/
  instance:
    prefer-ip-address: true
eureka:
  client:
    service-url:
      defaultZone: http://localhost:3000/eureka/
  instance:
    prefer-ip-address: true

spring:
  application:
    name: cloud-server-demo

启动 localhost:3000


image.png

可以看到已经注册成功了

然后controller中新加一个跳转


    @RequestMapping("/hello")
    public String hello(@RequestParam String id){
        return restTemplate.getForObject("http://cloud-server-demo/hello?id="+id,String.class);
    }

可以看到是直接通过服务名称进行访问的,不需要链接了.


这样一个简单的微服务就搭建完成了.

相关文章

网友评论

      本文标题:微服务以及SpringCloud的搭建

      本文链接:https://www.haomeiwen.com/subject/fbrheqtx.html