用nacos作为服务注册中心,如何注册.NetCore服务,如何在Java中调用.NetCore服务呢?可以分为下面几个步骤:

0.运行nacos

1.开发.net core服务,然后调用nacos提供的.net core sdk注册服务。

2.开发Java服务,然后注册服务。

3.用RestTemplate调用.net core服务。

4.用OpenFeign调用服务

下面来看具体步骤:

0.参考我之前的文章分布式配置nacos搭建踩坑指南(下) ,首先运行nacos.

1.首先开发一个.net core web api,我们返回的数据是天气预报消息,新建一个WeatherForecastController,代码如下:

using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
​
namespace WebApi.Controllers
{[ApiController][Route("[controller]")]public class WeatherForecastController : ControllerBase{private static readonly string[] Summaries = new[]{"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"};
​private readonly ILogger<WeatherForecastController> _logger;
​public WeatherForecastController(ILogger<WeatherForecastController> logger){_logger = logger;}
​[HttpGet]public IEnumerable<WeatherForecast> Get(){var rng = new Random();return Enumerable.Range(1, 5).Select(index => new WeatherForecast{Date = DateTime.Now.AddDays(index),TemperatureC = rng.Next(-20, 55),Summary = Summaries[rng.Next(Summaries.Length)]}).ToArray();}//public String Get()//{//    return "sunny";//}
​}
}

然后设置好访问的url,在launchSettings.json的修改 "applicationUrl": "http://192.168.1.110:5000",注意这里去掉了https://192.168.1.110:5001,是为了避免在后面Java调用时需要证书的麻烦。

最后我们在cmd中输入dotnet run,当服务正常运行起来后,在浏览器中输入:http://192.168.1.110:5000/weatherforecast,发现成功返回天气数据,格式为json,截图如下:

2.net core项目中引入nuget包:nacos-sdk-csharp,截图如下:

3.调用nacos-sdk-csharp,进行服务注册,代码如下:

using System;
using Microsoft.Extensions.DependencyInjection;
using Nacos.V2;
using Nacos.V2.DependencyInjection;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace NacosDiscoveryProviderNetCoreTest1
{class Program{static async Task Main(string[] args){string serverAddr = "http://localhost:8848";string dataId = "config2";string group = "DEFAULT_GROUP";
​IServiceCollection services = new ServiceCollection();//register service services.AddNacosV2Naming(x =>{x.ServerAddresses = new List<string>() { serverAddr };//x.ConfigUseRpc = true;
​});IServiceProvider serviceProvider = services.BuildServiceProvider();var namingSvc = serviceProvider.GetService<INacosNamingService>();await namingSvc.RegisterInstance("weatherforecast", "192.168.1.110", 5000);Console.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(await namingSvc.GetAllInstances("weatherforecast")));Console.ReadKey();
​
​}}
}

我们进入nacos后台,如果服务注册成功,我们就会在服务列表中看到weatherforecast服务了,如下所示:

有两个地方必须切记注意:

1).namingSvc.RegisterInstance("weatherforecast", "192.168.1.110", 5000);是一句很关键的代码,意思是注册一个名为weatherforecast,地址为:192.168.1.110,端口为:5000的服务。

2)launchSettings.json里的applicationUrl必须去掉包含https的设置,只保留http的设置,即只保留:"applicationUrl": "http://192.168.1.110:5000",否则在Java中调用会报证书错误。

4.参考nacos服务注册,利用阿里巴巴Spring boot脚手架,引入:spring-boot-starter-web,spring-cloud-starter-alibaba-nacos-discovery,spring-cloud-starter,spring-boot-starter-test,spring-cloud-starter-loadbalancer,spring-cloud-starter-openfeign。完整的pom如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.11</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.alibaba.cloud</groupId><artifactId>nocos-discovery-consumer-sample</artifactId><version>0.0.1-SNAPSHOT</version><name>nocos-discovery-consumer-sample</name><description>Demo project for Spring Boot</description>
​<properties><java.version>1.8</java.version><spring-cloud-alibaba.version>2021.0.4.0</spring-cloud-alibaba.version><spring-cloud.version>2021.0.4</spring-cloud.version></properties>
​<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter</artifactId></dependency>
​<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId><version>3.0.1</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.47</version>
</dependency>
​
​
​
<dependency>
<groupId>org.netbeans.external</groupId>
<artifactId>org-apache-commons-httpclient</artifactId>
<version>RELEASE126</version>
</dependency>
​
​</dependencies>
​<dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>
​<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
​
</project>

5.application.properties的设置同前面的文章里介绍的设置一样,代码如下所示:

spring.application.name=nocos-discovery-consumer-sample
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
spring.cloud.nacos.discovery.server-addr=localhost:8848
spring.cloud.nacos.discovery.namespace=public
spring.main.allow-circular-references=true
server.port=9091

6.新建一个名为WeatherService的接口,代码如下:

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClient;
​
​
@FeignClient("weatherforecast")
@LoadBalancerClient("weatherforecast")
public interface WeatherService {
​@GetMapping("/Weatherforecast")public String getWeather();}

7.新建一个RestTemplateController,代码如下:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
​
import com.alibaba.fastjson.JSONObject;
​
import org.springframework.context.annotation.Bean;
import org.apache.commons.httpclient.methods.GetMethod;
//import org.apache.http.client.HttpClient;
import org.apache.commons.httpclient.HttpClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import java.io.*;
​
​
​
@RestController
public class RestTemplateController {
​//@LoadBalanced@Autowiredpublic RestTemplate resttemplate;//@LoadBalanced@Beanpublic RestTemplate restTemplate() {return new RestTemplate();}@Autowiredprivate EchoService echoService;@Autowiredprivate WeatherService weatherService;@Autowired DiscoveryClient discoveryClient;//resttemplate test@GetMapping("/call/echo") public String callEcho() { System.out.println("callEcho");ServiceInstance serviceInstance=discoveryClient.getInstances("weatherforecast").get(0);System.out.println("Host is: "+serviceInstance.getHost()+" ,port is: "+serviceInstance.getPort());String urlString=serviceInstance.getHost()+":"+serviceInstance.getPort()+"/weatherforecast";   urlString="http://"+urlString;     //RestTemplate testreturn resttemplate.getForObject(urlString, String.class);}//openFeign test@GetMapping("/getWeather")public String getWeather() {return weatherService.getWeather();
​}
}

其中要注意的几点:

1) ServiceInstanceserviceInstance=discoveryClient.getInstances("weatherforecast").get(0);是一句关键的代码,用于获取weatherforecast服务的实例。

2)callEcho()是调用RestTemplage访问netcore服务

3)getWeather是调用openFeiign访问netcore服务

8.启动类代码如下:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
​
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
​
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class NocosDiscoveryConsumerSampleApplication {
​public static void main(String[] args) {SpringApplication.run(NocosDiscoveryConsumerSampleApplication.class, args);}
​
}

9.运行,访问http://192.168.1.110:5000/weatherforecast和http://localhost:9091/getWeather:

nacos实现Java和.NetCore的服务注册和调用相关推荐

  1. 【Zookeeper】JAVA通过ZK实现服务注册和服务发现

    无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家.教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家.点这里可以跳转到教程. 服务化现在已经是个很成熟的概念 ...

  2. spring cloud eureka服务注册和调用

    SPRING INITIALIZR构建工程 spring boot 可通过SPRING INITIALIZR构建项目 访问SPRING INITIALIZR官网,填写项目相关信息后,生成项目. 将下载 ...

  3. 【微服务】微服务注册与调用----Eureka

    Eureka 前言 Eureka简介 Eureka Server Eureka Client Eureka优势 Eureka Server单点模式 创建Eureka Server 创建Spring B ...

  4. Java学习四阶段-07 服务注册中心Nacos

    Nacos注册中心简介 背景分析 在微服务中,首先需要面对的问题就是如何查找服务(软件即服务),其次,就是如何在不同的服务之间进行通信?如何更好更方便的管理应用中的每一个服务,如何建立各个服务之间联系 ...

  5. Spring Cloud微服务之Nacos服务注册(九)

    Nacos服务注册 前言 具体步骤 1.在service模块配置pom.xml 2.添加服务配置信息 3.添加Nacos客户端注解 4.启动客户端微服务 最后 前言 上一篇中我们介绍完了Nacos的基 ...

  6. SpringCloud学习之(十八)SpringCloud Alibaba Nacos服务注册和配置中心

    文章目录 (十八)SpringCloud Alibaba Nacos服务注册和配置中心 1.Nacos简介 1.1 为什么叫Nacos 1.2 Nacos是什么 1.3 Nacos能干嘛 1.4 Na ...

  7. 服务注册中心Nacos

    文章目录 一.服务注册中心Nacos最佳实践 1.Nacos注册中心简介 背景分析 Nacos概述 构建Nacos服务 初始化配置 服务启动与访问 2.服务注册与调用入门(重点) 业务描述 生产者服务 ...

  8. Nacos服务注册与发现源码剖析

    文章目录 前提介绍 Nacos源码下载 Nacos客户端源码 Spring Cloud Starter Nacos 源码 Nacos服务端源码 前提介绍 服务注册与发现作用主要是为了更好的管理众多的服 ...

  9. Nacos服务注册中心(微服务)

    为什么要用服务注册中心? 在微服务中,首先需要面对的问题就是如何查找服务(软件即服务), 其次就是如何在不同的服务之间进行通信? 如何更好更方便的管理应用中的每一个服务,如何建立各个服务之间联系的纽带 ...

最新文章

  1. 深入探讨Python的import机制:实现远程导入模块 | CSDN博文精选
  2. Redis AOF 持久化详解
  3. 慕课网_《微信授权登录》学习总结
  4. 算法------------完全平方数(Java版本)
  5. 【NET CORE微服务一条龙应用】开始篇与目录
  6. 恶补sql知识(一)
  7. 三星Galaxy Fold中国区发布会临时取消:推迟时间未定 彻查屏幕问题
  8. SSM框架搭建过程----学生学籍管理系统
  9. 【报告分享】2021年空巢青年研究报告:静水流深,不将就的青春.pdf(附下载链接)...
  10. [framework] debuging
  11. 《软件开发这点事儿》作者邵志东老师视频发布
  12. 06. Explicitly disallow the use of compiler-generated functions you do not want
  13. 基于protues与keli下贪吃蛇的实现
  14. C++入门项目——通讯管理系统
  15. 【c语言】计算圆周率的近似值
  16. 如何将域名和网站转入香港主机
  17. 财富、通胀与印钞——读《原则2 :应对变化中的世界秩序》(上)
  18. 学生个人网页设计作品 HTML+CSS+JavaScript仿小米商城(8页) 学生个人网页模板 简单个人主页成品 个人网页制作 HTML学生个人网站作业设计代做
  19. Swift 方法的多面性
  20. 专访光之树创始人张佳辰:围绕产业化和商业化落地,迈向隐私科技

热门文章

  1. js 中控制打印方向横向还是纵向。
  2. 比较ping,tracert和pathping等命令之间的关系
  3. 【问】已经不用了的门店,在总部如何删除门店库存
  4. windows下PHP获取视频第一帧图片作为背景图
  5. 微信 配置文件 android,微信支付,配置指南 (Android 端) – 热爱改变生活
  6. delete_failed_internal_error安装失败
  7. js微信抢红包脚本代码_JavaScript语言基于AutoJs简易微信抢红包参考大佬修改
  8. Java中的substring()方法
  9. Python 拼图成心【大小,图数可调节】
  10. 淘宝/天猫电商API接口详情