马仁喜

有些事,明知是错的,也要去坚持,因为不甘心;有些人,明知是爱的,也要去放弃,因为没结局;有时候,明知没路了,却还在前行,因为习惯了.......

SpringCloud服务注册、发现与调用

本文主要是springcloud入门提现分布式服务架构

一、这里主要有三个角色:服务注册中心、服务提供者、服务消费者

二、主要的功能为两个模块分布在不同的机器上服务消费者进行调用服务提供者,这里不涉及业务逻辑和crud操作

三、博主亲测可跑,如有问题可以联系博主QQ372445135,话不啰嗦上代码

四、工程创建:

        1、首先创建一个maven、springboot工程用于作为服务注册中心(功能1.注册服务、2.服务消费发现服务)

这里我是手动创建maven工程主要包括pom文件和对应的src文件即可

                                    

pom文件添加依赖如下

 <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Dalston.RC1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <!--eureka server -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>

        </dependency>
        <!-- spring boot test-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <!--maven打包时应用-->
    <build>
        <finalName>${project.artifactId}-${maven.build.timestamp}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

项目入口函数添加注解@EnableEurekaServer表示这是一个注册中心

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
    //项目主入口
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

yml或者application.properties配置文件配置如下

server:
   port: 8888
eureka:
   instance:
       hostname: localhost
   client:
       registerWithEureka: false
       fetchRegistry: false
       serviceUrl:
           defaultZone: http://localhost:8888/eureka/
   server:
     enable-self-preservation: false
spring:
  freemarker:
    prefer-file-system-access: false
  cloud:
    config:
      enabled: false

启动入口函数后输入地址localhost:8888访问注册中心后台页面:


接着就可以去创建服务提供者项目了:目录结构一样,

pom文件里添加依赖:因为这里不需要声明成注册中心所以少一个依赖

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
            <version>1.3.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
            <version>1.3.1.RELEASE</version>
        </dependency>

入口函数同样添加注解@EnableDiscoveryClient或者@EnableEurekaClient后者比较单一,前者兼容zk


配置文件添加如下:

server.port=38080
#指定Eureka
eureka.client.service-url.defaultZone:http://localhost:8888/eureka/
#配置表示注册主机名到eureka
#eureka.instance.prefer-ip-address=true
spring.application.name=service-name1

这里我以HelloWorldController里的方法helloget为服务方法

 @Controller
//使用该注解支持跨域
@CrossOrigin
public class HelloWorldController {
  @RequestMapping(value = "/helloget")
    @ResponseBody
    public DataResponse helloget() {
        String s="测试开源框架GET请求连通乱码问题";
        DataResponse dataResponse=new DataResponse();
        return dataResponse ;
    }
}

启动main入口类刷新注册中心页面可以看到服务已经注册上来了


接着我们就可以创建服务消费者了,

pom文件依赖: 这里我们会有一个远程服务调用会使用到feign(因为项目中有swagger依赖会产生接口注入空指针问题可以将swagger版本提升到2.5以上解决如果没有还有空指针可以留言或直接联系博主)

      <!--eureka server -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
            <version>1.3.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
            <version>1.3.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-feign</artifactId>
            <version>1.3.1.RELEASE</version>
        </dependency>

入口函数添加注解//服务调用注解

@EnableFeignClients和@EnableDiscoveryClient

配置文件配置如下

server.port=48080
#指定Eureka
eureka.client.service-url.defaultZone:http://localhost:8888/eureka/
#配置表示注册主机名到eureka
#eureka.instance.prefer-ip-address=true
spring.application.name=service-name2

调用服务使用Feign

/**
 * Created by *** on 2018/6/14.
 * 功能描述:
 */
@FeignClient(name= "service-name1")
public interface HelloRemote {
    @RequestMapping(value = "/helloget.tml")
    public DataResponse helloget();
}

在需要调用远程服务的地方注入接口调用方法获取数据

/**
 * Created by on 2018/6/14.
 * 功能描述:
 */
@RestController
public class CustomerController {
    @Autowired
    HelloRemote helloRemote;
    @RequestMapping(value = "getEureka")
    public DataResponse getCus(){
        DataResponse helloget = helloRemote.helloget();
        return  helloget;
    }
}

最后我们可以看到效果如图:


今天就到这里吧!第一次写博客写的不好多多提意见,如果有其他问题也可以提,能力之内有问必答!之后也会有更新以及大数据等方向的更新



阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/marenxi/article/details/80695753
个人分类: springcloud
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭