.net core + eureka + spring boot 服务注册与简单的调用

假期小长假遇上疫情只能去家里蹲了,刚好有时间总结一下。

概述

微服务架构是当前比较火的分布式架构,本篇基于.net core微服务 和 Eureka 服务注册于发现中心,实现将.net core 的微服务注册到Eureka 中,并实现调用java的微服务。

本次主要采用的是.net core 5 版本和spring boot  2.3.3 RELEASE 版本进行验证

实践

1.net core api创建





2.添加引用

  • 在nuget中添加Steeltoe.Discovery.ClientCore、Steeltoe.Discovery.Eureka(必须得添加这个,否则无法注册到Eureka中)

3.修改启动(Startup)配置

  • 修改 ConfigureServices 方法
 public void ConfigureServices(IServiceCollection services)
{
Console.WriteLine(Configuration);
services.AddDiscoveryClient(Configuration);//添加配置 services.AddControllers();
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "Add2EurekaDemo", Version = "v1" });
});
}
  • 修改Configure 方法
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseSwagger();
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "Add2EurekaDemo v1"));
} app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
app.UseDiscoveryClient();//启用服务发现
}

4.修改配置文件

{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information",
"Steeltoe": "Debug"//启动日志
}
},
"AllowedHosts": "*",
"Urls": "http://localhost:9003",
"spring": {
"application": {
"name": "app-pets-net"
}
},
"eureka": {
"client": {
"serviceUrl": "http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka", //注册中心url 集群用,隔开
"shouldFetchRegistry": true, //发现服务
"shouldRegisterWithEureka": true, //注册服务
"validate_certificates": false
},
"instance": {
"hostName": "127.0.0.1",
"appName": "app-pets-net-pai", //默认是在运行时自动确认的 不加上这个的话网关找不到服务
"port": 9003, //设置该服务中注册的端口
"leaseRenewalIntervalInSeconds": 30,
"leaseExpirationDurationInSeconds": 90
}
}
}

注意:如果没有增加Steeltoe.Discovery.Eureka的引入,则会报以下警告,且无法注册到eureka中

5.启动.net core 服务

表示启动成功

6.查看eureka

服务注册成功

调用其他服务

1.增加接口

在net core 服务中的Controller添加MyControllerBase、PaymentController文件:

  • MyControllerBase
using Microsoft.AspNetCore.Mvc;
using Steeltoe.Common.Discovery;
using Steeltoe.Discovery;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks; namespace app_pets_net.Controllers
{
public abstract class MyControllerBase : ControllerBase
{
protected DiscoveryHttpClientHandler HttpClientHanlder; public MyControllerBase(IDiscoveryClient client)
{
HttpClientHanlder = new DiscoveryHttpClientHandler(client);
}
}
}
  • PaymentController
using Microsoft.AspNetCore.Mvc;
using Steeltoe.Discovery;
using System;
using System.Net.Http;
using System.Threading.Tasks; namespace app_pets_net.Controllers
{
public class PaymentController : MyControllerBase
{
public PaymentController(IDiscoveryClient client) : base(client) { } [Route("net/payment/zipkin")]
public async Task<String> Pay()
{
var client = new HttpClient(HttpClientHanlder, false);
var result = await client.GetStringAsync("http://CLOUD-PAYMENT-SERVICE/payment/zipkin");
Console.WriteLine(result);
return result;
}
}
}

2.启动服务

  • 启动java 服务

  • 启动 .net core 服务

  • eureka中检查服务是否完成注册

以上表明两个服务已经启动完成

3.检验

浏览器中输入http://localhost:9003/net/payment/zipkin 查看结果

由于java中的接口是返回一个uuid的,因此表示远程调用成功

  • java中的接口

    4.java 服务调用net 服务

  • .net core 中的PaymentController中增加接口

    [Route("net/petOrders")]
    public IEnumerable<PetOrderItme> PetOrders()
    {
    List<PetOrderItme> list = new List<PetOrderItme>();
    for (int i = 0; i < 20; i++)
    {
    list.Add(new PetOrderItme());
    }
    return list;
    }
  • Java中通过feign的方式调用 .net core的服务
      增加PetsAppService接口

 @Component
@FeignClient("http://APP-PETS-NET-PAI")
public interface PetsAppService {
/**
*
*
* @return
*/
@GetMapping(value = "/net/petOrders")
Object petOrders(); }

Controller中增加对应的接口

 @Autowired
PetsAppService petsAppService;
@GetMapping("/consumer/petOrders")
public CommonResult getPetyOrders(){
CommonResult result= new CommonResult<>();
result.setData(petsAppService.petOrders());
return result;
}

5. 启动相关服务并验证

验证.net core 的服务是否正常,浏览器中输入 http://localhost:9003/net/petOrders
结果:

验证java服务是否能够调用.net core 中的服务,浏览器中输入 http://localhost:8010/consumer/petOrders
结果:

以上边完成了java和。net core 的服务间的调用,当让调用服务我们也可以使用httpclient 指定的ip和端口的方式去调用,如果是集群的模式下,这种通过注册中心管理服务,然后服务调用端通过服务名称去调用相关的服务,就不用知道哪个ip和端口了,服务迁移到别的地方的时候我们也无需改动成指定的ip,只需要改动注册中心的ip即可。

以上仅是个人的总结,欢迎指正。

.net core + eureka + spring boot 服务注册与调用的更多相关文章

  1. spring cloud 服务注册中心eureka高可用集群搭建

    spring cloud 服务注册中心eureka高可用集群搭建 一,准备工作 eureka可以类比zookeeper,本文用三台机器搭建集群,也就是说要启动三个eureka注册中心 1 本文三台eu ...

  2. 孰能巧用 Spring Cloud 服务注册中心Eureka

    Eureka介绍 在Spring Cloud Netflix 整合技术栈中,Eureka既可以作为服务注册中心也可以用于服务发现对整个微服务架构起着最核心的整合作用. Eureka是基于REST(Re ...

  3. spring Cloud服务注册中心Eureka集群

    spring Cloud服务注册中心Eureka集群配置: 在application.yml文件加以下配置: server: port: 8761 tomcat: uri-encoding: UTF- ...

  4. Spring Cloud Eureka 2 (Eureka Server搭建服务注册中心)

    工具:IntelliJ IDEA 2017.1.2 x64.maven3.3.9 打开IDE  file===>new===>project next next 选择相应的依赖 next ...

  5. .NET CORE与Spring Boot编写控制台程序应有的优雅姿势

    本文分别说明.NET CORE与Spring Boot 编写控制台程序应有的“正确”方法,以便.NET程序员.JAVA程序员可以相互学习与加深了解,注意本文只介绍用法,不会刻意强调哪种语言或哪种框架写 ...

  6. NET CORE与Spring Boot

    NET CORE与Spring Boot 本文分别说明.NET CORE与Spring Boot 编写控制台程序应有的“正确”方法,以便.NET程序员.JAVA程序员可以相互学习与加深了解,注意本文只 ...

  7. windows环境下,spring boot服务使用docker打包成镜像并推送到云服务器私有仓库

    最近在淘宝上学习springcloud教程,其中有几节课是讲解讲本地springboot服务打包成镜像并推送到云服务器私有仓库,但是教程里面用的事Mac环境,我的是Windows环境,而且课程里面没有 ...

  8. Spring Cloud服务注册中心交付至kubernetes

    前言 服务发现原则: 各个微服务在启动时,会将自己的网络地址等信息注册到服务发现组件中,服务发现组件会存储这些信息 服务消费者可以从服务发现组件中查询到服务提供者的网络地址,并使用该地址来远程调用服务 ...

  9. Java框架Spring Boot & 服务治理框架Dubbo & 应用容器引擎Docker 实现微服务发布

    微服务系统架构实践 开发语言Java 8 框架使用Spring boot 服务治理框架Dubbo 容器部署Docker 持续集成Gitlab CI 持续部署Piplin 注册中心Zookeeper 服 ...

随机推荐

  1. Chrome自带功能实现网页截图

    更新记录 本文迁移自Panda666原博客,原发布时间:2021年6月28日. 很简单,按下Ctrl+Shift+P,打开命令行窗口,如下图所示. 输入命令. Capture full size sc ...

  2. SQL Server 2008~2019版本序列号/密钥/激活码 汇总

    SQL Server 2019 Enterprise:HMWJ3-KY3J2-NMVD7-KG4JR-X2G8G Strandard:PMBDC-FXVM3-T777P-N4FY8-PKFF4 SQL ...

  3. 6大优势、2种类型,一文吃透动态应用安全测试(DAST)

    在在上篇文章中中,我们了解了 SAST 的概念.优劣和使用的工具,并在文章里提到了另一个软件安全领域里的重要技术 DAST.本文将会详细介绍 DAST 的概念.重要性及其工作原理.   DAST(Dy ...

  4. BUUCTF-被偷走的文件

    被偷走的文件 这题刚开始还以为是单纯的流量题,看流量半天也没发现什么异常. 因为是文件传输过程的,所以我们看到ftp的流量就过滤下看看即可. 在第三个包发现flag.rar存在. 一开始我觉得没啥,后 ...

  5. 158_模型_Power BI 使用 DAX + SVG 打通制作商业图表几乎所有可能

    158_模型_Power BI 使用 DAX + SVG 打通制作商业图表几乎所有可能 一.背景 最近对 Power BI 中使用 SVG 比较感兴趣,今天我们使用 DAX + SVG 复刻一下 Ze ...

  6. UiPathExcel写入操作

    一.Excel 写操作 1.写一个单元格 (1)控件介绍 Write Cell: 使用Write Cell控件,在指定单元格写入内容     常用属性介绍: Destination: Cell: 要写 ...

  7. bat-配置环境变量2-给PATH追加环境变量

    使用setx /M path "%path%;%%winrar%%"这种方式修改环境变量存在的问题 对于 path 这种 既有用户级变量和系统级变量的变量 直接使用setx /M ...

  8. CentOS7使用LVM缩减/home空间,扩大/空间

    CentOS7使用LVM缩减/home空间,扩大/空间方法:把/home里的内容备份,然后将/home文件系统所在的逻辑卷删除,扩大/文件系统.新建/home,恢复/home的原内容1.查看默认分区[ ...

  9. 关于webapi调用wcf并发假死的分析

    原来IDFA(IOS推广获取到用户IOS手机的唯一标识,如果不刷机的话跟安卓的IMEI一样)在公司正常的页面是公用用一个网站和数据库的. 起初怀疑并发数太多,把数据库连接池的数量从一百设置到三百,确实 ...

  10. 可落地的DDD(7)-战术设计上的一些误区

    背景 几年前我总结过DDD战术设计的一些落地经验可落地的DDD(5)-战术设计,和一次关于聚合根的激烈讨论最近两年有些新的落地体验,回过头来发现,当初对这些概念的理解还是没有深入,这篇文章重新阐述下. ...