spring cloud+dotnet core搭建微服务架构

spring cloud+dotnet core搭建微服务架构

  • 商品编号:
    #14587243_145
    • 原价:
      免费
    • 会员价:
      免费
  • 分类:
    • V1.0.0
  • 数量:

购物车中已存在此商品,请在购物车中操作单击跳转购物车

  • 开发者:龙向辉
  • 开发语言:spring cloud+dotnet core
  • 开发环境:Visual Studio
  • 数据库:无
  • 商品架构:B/S
  • 代码管理工具:github
  • 编码格式:utf-8
  • 是否开源:是
  • 开源协议:BSD

背景

    公司去年开始使用dotnet core开发项目。公司的总体架构采用的是微服务,那时候由于对微服务的理解并不是太深,加上各种组件的不成熟,只是把项目的各个功能通过业务层面拆分,然后通过nginx代理,项目最终上线。但是这远远没达到微服务的要求,其中服务治理,断路器都没有。我个人理解,我们谈微服务实际上更多的是谈服务治理这块东西,至于各个的服务只是微服务中的应用而已。一次偶然的机会发现了java的spring cloud这套框架,而且支持dotnet core集成(Steeltoe OSS)。所以目前我们的项目架构是spring cloud搭建底层微服务框架,dotnet core来编写业务逻辑。

spring cloud

    spring cloud是java平台提供的一套解决方案,目前市面上来说可能不是最好的微服务解决方案,但是一定是功能最齐全最全的解决方案。提供了一些微服务的基础功能,包括服务治理、负载均衡、断路器、配置中心、API网关等等。

服务治理

    关于服务治理这块东西,网上太多太多的资料和原理。相信大家也看了很多,但是如何应用到实际的项目场景,为什么要这样做呢?传统的项目,服务与服务之间的调用都是通过URL来访问,如果是集群那么通过一个负载均衡地址来访问,增加或者减少机器都是通过维护负载均衡列表的IP地址来实现。微服务架构下,分散成了N个服务,每个服务又是一个集群,对于一个大项目来说,维护这些配置是非常头疼的。笔者曾经在某知名互联网公司工作过,公司最累最背锅的就是运维团队,基本24小时都在应付各个团队的部署上线工作以及各种配置的维护,而且还经常出错挨骂。那么服务治理就出现在这种应用场景之中,运维工程师不用再维护各个负载均衡节点,由服务中心去统一处理。举个简单例子,一个电商网站,分解成N个服务,其中有一个用户服务,有一个订单服务,用户服务需要调用订单服务,而订单服务是一个集群,对于用户中心来说他只需要知道访问订单中心即可,至于具体访问订单中心的哪台机器由服务中心来调配。

搭建服务治理平台

1. java开发环境和IDE使用请自行百度,笔者java开发的ide使用的intellij idea。

2.创建一个spring boot项目,项目名称service-center,添加spring cloud的依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>

3.添加@EnableEurekaServer注解

@EnableEurekaServer
@SpringBootApplication
public class ServiceCenterApplication {}

4.设置应用程序的端口和名称

spring.application.name=service-center
server.port=5000

5.启动项目,在浏览器输入http://localhost:5000/

o_eureka

注册服务

1.使用vs创建一个dotnet core web api程序

2.使用nuget添加Pivotal.Discovery.Client库

<PackageReference Include="Pivotal.Discovery.Client" Version="1.1.0" />

3.Program.cs 设置一个端口

public static void Main(string[] args)
{
    var host = new WebHostBuilder()
        .UseKestrel()
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseIISIntegration()
        .UseStartup<Startup>()
        .UseApplicationInsights()
        .UseUrls("http://*:8010")
        .Build();

    host.Run();
}

4.Startup.cs

public void ConfigureServices(IServiceCollection services)

{

    services.AddDiscoveryClient(Configuration);

    // Add framework services.

    services.AddMvc();

}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)

{

    loggerFactory.AddConsole(Configuration.GetSection("Logging"));

    loggerFactory.AddDebug();

    app.UseMvc();

    app.UseDiscoveryClient();

}

5.appsettings.json

{
"Logging": {
    "IncludeScopes": false,
    "LogLevel": {
        "Default": "Warning"
    }
},
"spring": {
    "application": {
        "name": "serviceone"
    }
},
"eureka": {
    "client": {
        "serviceUrl": "http://localhost:5000/eureka/",
        "shouldFetchRegistry": false,
        "shouldRegisterWithEureka": true 
    },
    "instance": {
        "port": 8010
    }
}
}

如果是团队开发,"shouldRegisterWithEureka"设置成false,防止本地环境注册到开发环境

6. 启动程序,再次访问http://localhost:5000/发现已经注册到服务中心了

o_eureka1

7.同样的方式我们再创建一个ServiceTwo的项目,修改programe.cs和appsettings.json文件,其它不变

public static void Main(string[] args)
{
    var host = new WebHostBuilder()
        .UseKestrel()
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseIISIntegration()
        .UseStartup<Startup>()
        .UseApplicationInsights()
        .UseUrls("http://*:8011")
        .Build();

    host.Run();
}
{
"Logging": {
    "IncludeScopes": false,
    "LogLevel": {
        "Default": "Warning"
    }
},
"spring": {
    "application": {
        "name": "servicetwo"
    }
},
"eureka": {
    "client": {
        "serviceUrl": "http://loclhost:5000/eureka/",
        "shouldFetchRegistry": false,
        "shouldRegisterWithEureka": true 
    },
    "instance": {
        "port": 8011
    }
}
}

8.再次访问http://localhost:5000/,发现ServiceOne和ServiceTwo都已经注册到服务中心了

o_eureka2

后记

    这样一个简单的服务治理平台就搭建出来了,我们通过spring cloud来创建了一个服务中心,然后通过dotnet core创建了2个服务注册到了服务中心,但是这些离微服务还差的远.服务之间怎么相互调用呢?集群模式怎么处理呢?微服务的统一API网关呢?留下这些问题,且听下回分解。

    第二篇文章已经发布。spring cloud+dotnet core搭建微服务架构:服务发现(二)

求推荐,你们的支持是我写作最大的动力,我的QQ群:328438252,交流微服务。

传送门

参考资料

java部分

.net部分


权利声明:本站所有商品信息、客户评价等信息是初心商城重要的数据资源,未经许可,禁止非法转载使用。 注:本站商品信息均来自初心商城,其真实性、准确性和合法性由初心商城负责。

                  初心源说明:初心商城主要为程序员提供开发基础的代码源以及成熟项目,网站中所有的商品有提供收费版本的, 也有提供免费版本的,按照大家各自不同的需求进行购买。实实在在的让程序员只用专注于自己的业务实现你的小梦想, 如果您对我们的成果表示认同并且觉得对你有所帮助我们愿意接受来自各方面的支持^_^。

                  支持:用手机扫描二维码支付

                  支付宝支持我们 微信支持我们

                  您的支持将被用于:
                  1、持续深入的上传更多更好的源代码
                  2、建立更加完善的技术社区
                  3、完善现在系统出现各种问题
                  4、购买域名和租赁服务器

                  1、交易规则

                  2、发货方式

                  1、自动:在上方保障服务中标有自动发货的商品,拍下后,将会自动收到来自卖家的商品获取(下载)链接

                  2、手动:在上方保障服务中标有手动发货的商品,拍下后,卖家会收到邮件,也可通过QQ或订单中的电话联系对方。

                  3、退款说明

                  1、描述:源码描述(含标题)与实际源码不一致的(例:描述PHP实际为ASP、描述的功能实际缺少、版本不符等)

                  2、演示:有演示站时,与实际源码小于95%一致的(但描述中有"不保证完全一样、有变化的可能性"类似显著声明的除外)

                  3、发货:手动发货源码,在卖家未发货前,已申请退款的

                  4、服务:卖家不提供安装服务或需额外收费的(但描述中有显著声明的除外)

                  5、其它:如质量方面的硬性常规问题等

                  备注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。交易中的商品,卖家无法对描述进行修改!

                  4、注意事项

                  1、客户买完之后未确认收货,将不会收到下载地址和下载码,确认收货之后才能收到下载地址和下载码。

                  2、在未拍下前,双方在QQ上所商定的内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准);

                  3、在商品同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外);

                  4、在没有"无任何正当退款依据"的前提下,写有"一旦售出,概不支持退款"等类似的声明,视为无效声明;

                  5、虽然交易产生纠纷的几率很小,但请尽量保留如聊天记录这样的重要信息,以防产生纠纷时出现问题不明确的情况。

                  5、交易声明

                  1、本站作为直卖平台,依据交易合同(商品描述、交易前商定的内容)来保障交易的安全及买卖双方的权益;

                  2、非平台线上交易的商品,出现任何后果均与本站无关;无论卖家以何理由要求线下交易的,请联系管理举报。

                  初心Logo

                  初心商城| 初心系列| 初心博客| 初心公告| 系统反馈

                  © 2016-2018 山西米立信息技术有限公司 保留所有权利 京ICP备16055626号
                  违法和不良信息举报电话:186-2950-9347,本网站所列数据,除特殊说明,所有数据均出自我工作室
                  本网站兼容所有主流浏览器,不支持手机自适应