一、前言

本文为spring cloud 微服务框架专题的第二篇,主要讲解如何快速搭建微服务以及如何注册。 本文理论不多,主要是傻瓜式的环境搭建,适合新手快速入门。

为了更好的懂得原理,大家可以下载《spring cloud 和docker微服务架构实战》pdf得书籍      链接: https://pan.baidu.com/s/1LLSqy0QGOhFei-5XJ2HVSA  密码: d2x7

如果这个链接失效了,大家可以联系我的邮箱,我会很快回复并把pdf发送给您, 邮箱地址 xinyudai_ifox@163.com

本教程代码地址为 https://github.com/daixiaoyu/springcloud-example-feign,大家可以下载下来运行

代码说明:为了力求真实开发实战,没有将注册中心,微服务,网关三个项目合在一个module中,而是拆分了,所以引入到idea中时请开三个idea分别引入

二、准备环境

maven(将maven配置到环境变量中,便于后期打包)、 如果需要源码请安装git、jdk  、*需要运行第一篇专题的注册中心*

由于此微服务的暴露是基于Feign的思想的,如果大家没有这方面的知识可以先查看pdf中关于feign的讲解,或者阅读其他博客,我后面的专题会专门讲解Feign

三、搭建和注册微服务

  •  将源码中的provider模块导入到Idea中,如果没有源码则可可以按照接下来的思路自己搭建,目录结构为下

可以看到provider中有两个模块,分别为cloud-provider 和cloud-provider-api,从命名上大概就可以清晰的看到,api模块只是

微服务需要向调用方提供的api接口,实际开发中,我们会将此模块打包到私服,而调用方可以通过Feign像调用本地方法一样

调用provier的真正实现,入参和返回值全实现了序列化接口并在api中定义

  • 编写api模块,api模块没有任何的技术栈,是单纯的java Bean和接口规范,是为了给客户端约束调用参数和返回值的,我们来

大家可以看到,规范的写法是,一个Rao接口,一个param入参和一个response返回值。接下来我们来看看Rao接口的定义

package com.dai.cloud.Rao;

import com.dai.cloud.param.UserParam;
import com.dai.cloud.response.UserResponse;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam; /**
* @author <a href="mailto:daixinyu@sinoland666.com">代欣雨</a>
* @description 服务提供者接口
* @date 2018/1/19 15:54
* @Version V1.0
*/
@FeignClient("provider-server") //告诉客户端,这个接口需要到这个服务中去寻找
@RequestMapping(value = "/provider")
public interface ProviderRao {
@RequestMapping(value = "/user",method = RequestMethod.POST)
UserResponse getUserByParam(@RequestBody UserParam param);
}

  大家可以看到,这里和spring mvc 的实现没有什么大的区别,对的,其实就是对外暴露接口而已,提供http服务

  • 接下来我们来看看provider模块(api的具体实现),是一个提供了http接口的服务,我们先看看他的pom
   <dependencyManagement>    spring cloud 的依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Camden.SR3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency> <spring mvc的依赖>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency> <注册中心的依赖,因为此微服务需要注册到注册中心>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency> <需要实现的api的接口,api>
<groupId>com.dai.cloud</groupId>
<artifactId>cloud-provicer-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency> </dependencies>
  •   再来看看他的配置文件
spring:
application:
name: provider-server 这里必须同api中rao接口中的@FeignClient的value值一样,不然调用方无法从注册中心获取到此服务地址
server:
port: 8006 服务端口
eureka:
client:
service-url:
defaultZone: http://localhost:9527/eureka/ 注册中心地址,此微服务运行起来后会自动注册到地址
instance:
prefer-ip-address: true /将ip配置到注册中心,实际的调用依然是ip ,http
hostname: com.dai.provider.node1.com /当前节点的名称
instance-id: com.dai.provider.node1.com /当前节点的id 实际开发中,一个微服务会运行多个实例,用于高可用,这两个配置都是用于区分每个实例
feign: /这个是Feign的配置,大家可以暂时不了解,或者看pdf的书籍
hystrix:
enabled:true

接下来我们来看看Rao接口的实现

package com.dai.cloud.controller;

import com.dai.cloud.Rao.ProviderRao;
import com.dai.cloud.param.UserParam;
import com.dai.cloud.response.UserResponse;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController; /**
* @author <a href="mailto:daixinyu@sinoland666.com">代欣雨</a>
* @description 请填类描述
* @date 2018/1/19 15:51
* @Version V1.0
*/
@RestController // spring mvc的注解,将此接口注册,必须是RestController
@Api(tags = "服务提供中心",description ="服务提供中心" )
public class ProviderController implements ProviderRao { // 可以看到这里实现了刚才在api中定义的接口,所有的连接地址都继承了,唯一需要注意的是入参的注解要写进来(@RequestBody等)
@ApiOperation(value = "查询用户")
@Override
public UserResponse getUserByParam(@RequestBody UserParam param) {
UserResponse response = new UserResponse();
response.setUserId(param.getUserId());
response.setUserName("代欣雨");
return response;
}
}
  • 服务都已经搭建完成了,其实很简单,就是往常的服务器和接口实现,1、只是注册到了注册中心,让其他调用者不用显示的指定ip和端口(注册中心会维护和管理)2、对外提供了api的接口,这里其实和web service的思想差不多
  • 接下来我们运行 Spring boot 的启动类(常规的,前提是注册中心已经运行)

我们就可以看见我们的服务已经注册到了注册中心,服务名,唯一服务id都已经指定,实际上在注册中心还保存了当前服务的ip地址端口号等信息。

下一篇我将编写远程的服务调用方,如果通过服务提供的api包就可以像调本地方法一样调用远程的服务,文章写得比较粗糙,我会不断优化和改进

谢谢大家,如果有哪里不明白的,或者运行不了我的源码项目的,可以给我发送邮件 xinyudai_ifox@163.com

    

spring cloud 专题二(spring cloud 入门搭建 之 微服务搭建和注册)的更多相关文章

  1. docker微服务部署之:二、搭建文章微服务项目

    docker微服务部署之:一,搭建Eureka微服务项目 一.新增demo_article模块,并编写代码 右键demo_parent->new->Module->Maven,选择M ...

  2. docker微服务部署之:三,搭建Zuul微服务项目

    docker微服务部署之:二.搭建文章微服务项目 一.新增demo_eureka模块,并编写代码 右键demo_parent->new->Module->Maven,选择Module ...

  3. docker微服务部署之:一,搭建Eureka微服务项目

    先说明一下docker需要搭建的微服务的基本情况: 项目情况:一个demo_parent项目,下面三个子模块:demo_eureka(eureka服务).demo_article(文章服务).demo ...

  4. 【分布式】-- 基于Nacos、OpenFeign搭建的微服务抽奖系统后台小案例

    1.项目介绍 最近入项目之前要求熟悉一下SpringCloud Nacos微服务基于Feign接口调用并整合Swagger2进行接口文档展示给前端,所以自己按照要求来编写并整合了一套基于SpringC ...

  5. springcloud(十四):搭建Zuul微服务网关

    springcloud(十四):搭建Zuul微服务网关 1. 2. 3. 4.

  6. docker入门与部署微服务--学习笔记

    最近公司进一步去windows,走向 linux+云化. 原来的一大坨windows虚拟机服务器都要转向linux, 既然走向linux的话,那么docker肯定是要涉足的. 故学习了docker入门 ...

  7. spring cloud微服务搭建第一天

    martin fowler大神提出微服务的概念后,各种微服务的技术满天飞,现在用的比较多的是spring cloud和阿里的dubbo,由于dubbo 在16年10月份就停止更新了,这里我们讲解spr ...

  8. spring cloud微服务搭建(一)

    martin fowler大神提出微服务的概念后,各种微服务的技术满天飞,现在用的比较多的是spring cloud和阿里的dubbo,由于dubbo 在16年10月份就停止更新了,不过好像前些天又更 ...

  9. 使用 Spring Cloud Sleuth、Elastic Stack 和 Zipkin 做微服务监控

    关于迁移微服务架构,最常被提及的挑战莫过于监控.每个微服务应独立于其他服务的运行环境,所以他们之间不会共享如数据源.日志文件等资源. 然而,较容易的查看服务的调用历史,并且能够查看多个微服务的请求传播 ...

随机推荐

  1. react-dom.js 源码

    /** *以下这是 react-dom.js 的源代码 * ReactDOM v15.3.1 * * Copyright 2013-present, Facebook, Inc. * All righ ...

  2. linux 集群及lvs

    集群及LVS 集群: 一组通过高速网络互联的计算机组,并以单一系统的模式加以管理 价格很多服务器集中起来,提供同一种服务,在客户端看起来就像只有一个服务器 可以在付出较低成本的情况下获得在性能,可靠性 ...

  3. alsa声卡分析alsa-utils调用过程

    如何分析tinyplay 播放音频和tinymix的过程?需要相应的工具来支持追查: 一.利用strace工具分析tinyplay和tinymix: strace -o tinyplay.log ti ...

  4. activiti怎么实现用户自定义流程?请先看这里

    最近一两个星期收到了好几个qq好友添加的请求和csdn的私信,里面基本都是询问activiti相关的问题. 尤其是今天有个朋友给我发了私信,内容如下: 你好,请问你关于activiti工作流的问题:怎 ...

  5. 笔记+R︱Logistics建模简述(logit值、sigmoid函数)

    本笔记源于CDA-DSC课程,由常国珍老师主讲.该训练营第一期为风控主题,培训内容十分紧凑,非常好,推荐:CDA数据科学家训练营 ---------------------------------- ...

  6. MFC与Webbrower交互(通过JS)

    最近修改老旧的MFC项目,用的网页做界面,和HTML交互采用的是COM方式,繁琐,丑陋又性能低,于是考虑利用js来进行界面交互,查了一天的资料,现在整理如下,供后来需要的人参考,虽然大概几乎不会有人用 ...

  7. Aspose.Words for .NET

    Aspose.Words for .NET Aspose.Words for .NET是 .NET 下先进的 Word 文档处理 API.它支持 DOC, OOXML, RTF, HTML, Open ...

  8. Java虚拟机的锁优化

    1 锁偏向.当现成请求一个对象锁时,如果获得锁,则该对象锁进入偏向模式,当该线程再次请求该对象的锁时,无需再做任何同步操作. 可通过在Java虚拟机中开启参数-XX:+UseBasedLock开启偏向 ...

  9. 【LightOJ1370】Bi-shoe and Phi-shoe(欧拉函数)

    [LightOJ1370]Bi-shoe and Phi-shoe(欧拉函数) 题面 Vjudge 给出一些数字,对于每个数字找到一个欧拉函数值大于等于这个数的数,求找到的所有数的最小和. 题解 首先 ...

  10. 【NOIP2016】【CJOJ2257】2257 愤怒的小鸟

    题目 Description https://www.luogu.org/problem/show?pid=2831 Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行 ...