1. 程式人生 > >.net framework 4.5 +steeltoe+ springcloud(二) 實現服務發現與呼叫功能

.net framework 4.5 +steeltoe+ springcloud(二) 實現服務發現與呼叫功能

首先,寫一個簡單的可被呼叫的服務註冊到服務中心,我們這命名為java-service,用的是IDEA建立一個spring boot專案,選擇spring client型別。 修改application.properties,配置服務中心地址和服務埠號:
spring.application.name=java-service
​
server.port=3222
​
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
修改pom.xml,加入架包引用:
  <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</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-eureka</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
修改主程式入口DemoclientApplication.java:
package com.ty.democlient;
​
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
​
@SpringBootApplication
@EnableEurekaClient
@RestController
public class DemoclientApplication {
​
    public static void main(String[] args) {
        SpringApplication.run(DemoclientApplication.class, args);
    }
​
    @Value("${server.port}")
    String port;
    @RequestMapping("/hi")
    public String home(@RequestParam String name) {
        return "hi "+name+",i am from port:" +port;
    }
}
把服務跑起來之後,我們看到在服務中心已經能看見這個服務了: 現在我們的目標是在另外一個.NET MVC專案裡通過服務名就能正常呼叫到這個服務,來看看怎麼做: 新建一個基於.Net Framework 4.5 的MVC專案,首先根目錄還是要有一個appsettings.json的檔案作為服務配置檔案:
{
  "spring": {
    "application": {
      "name": "demo_netfetch"
    }
  },
  "eureka": {
    "client": {
      "serviceUrl
": "http://localhost:8761/eureka/", "shouldFetchRegistry": true, "shouldRegisterWithEureka": true, "validate_certificates": false }, "instance": { "port": 3001 // Remove comments to enable SSL requests // More changes in Program.cs are required if using direct C2C communications //,"securePortEnabled": true } }, "Logging": { "IncludeScopes": false, "LogLevel": { "Default": "Debug", "Pivotal": "Debug", "Steeltoe": "Debug" } } }
shouldFetchRegistry設定為true代表這是一個服務發現客戶端 然後在專案目錄下建立Service呼叫的類,配置具體呼叫的服務名,內容輸出方式等:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Threading.Tasks;
using System.Web;
using Microsoft.Extensions.Logging;
using Steeltoe.Common.Discovery;
​
namespace DemoNetFetchClient.Services
{
    public class FetchServise : IFetchServise
    {
        DiscoveryHttpClientHandler _handler;
​
        private const string RANDOM_FORTUNE_URL = "http://java-service/hi?name=tian";//服務中心已註冊的服務地址
        private ILogger<FetchServise> _logger;
​
        public FetchServise(IDiscoveryClient client, ILoggerFactory logFactory = null)
        {
            _handler = new DiscoveryHttpClientHandler(client);
            _logger = logFactory?.CreateLogger<FetchServise>();
        }
​
        public async Task<string> RandomFortuneAsync()
        {
            _logger?.LogInformation("RandomFortuneAsync");
            var client = GetClient();
            return await client.GetStringAsync(RANDOM_FORTUNE_URL);
​
        }
​
        private HttpClient GetClient()
        {
            var client = new HttpClient(_handler, false);
            return client;
        }
    }
}
注意這裡需要引用擴充套件包:Steeltoe.Common.Discovery,從NuGet里加載就可以,注意版本,要選擇NET專用的,而不是Core用的。 修改HomeController.cs,非同步請求呼叫內部服務:
public class HomeController : Controller
    {
        IFetchServise _fortunes;
        ILogger<HomeController> _logger;
​
        public HomeController(IFetchServise fortunes,  ILoggerFactory logFactory = null)
        {
            _fortunes = fortunes;
            _logger = logFactory?.CreateLogger<HomeController>();
        }
​
        public async System.Threading.Tasks.Task<ActionResult> Index()
        {
            ViewBag.Message = await _fortunes.RandomFortuneAsync();
​
            return View();
        }
​
       
    }
修改Global.asax,註冊服務客戶端:
 這裡要注意,如果專案是webapi程式,需要按Autofac整合webAPI的配置,具體請參考我的另一篇筆記:C# Autofac整合之Framework WebAPI
protected void Application_Start()
        {
​
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
​
            ApplicationConfig.RegisterConfig("development");
​
            var builder = new ContainerBuilder();
​
            // Add Microsoft Options to container
            builder.RegisterOptions();
​
            // Add Microsoft Logging to container
            builder.RegisterLogging(ApplicationConfig.Configuration);
​
            // Add Console logger to container
            builder.RegisterConsoleLogging();
​
            // Register all the controllers with Autofac
            builder.RegisterControllers(typeof(MvcApplication).Assembly);
​
            // Register IDiscoveryClient, etc.
            builder.RegisterDiscoveryClient(ApplicationConfig.Configuration);
​
            // Register FortuneService
            builder.RegisterType<FetchServise>().As<IFetchServise>().SingleInstance();
​
            // Create the Autofac container
            var container = builder.Build();
            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
​
            // Get a logger from container
            var logger = container.Resolve<ILogger<MvcApplication>>();
​
            logger.LogInformation("Finished container build, starting background services");
​
            // Start the Discovery client background thread
 
 
            container.StartDiscoveryClient();
​
            logger.LogInformation("Finished starting background services");
        }
ok!done!程式跑起來效果,成功呼叫到服務中心內部服務java-service:

相關推薦

.net framework 4.5 +steeltoe+ springcloud 實現服務發現呼叫功能

首先,寫一個簡單的可被呼叫的服務註冊到服務中心,我們這命名為java-service,用的是IDEA建立一個spring boot專案,選擇spring client型別。 修改application.properties,配置服務中心地址和服務埠號: spring.application.n

.net framework 4.5 +steeltoe+ springcloud 實現服務註冊功能

首先得先了解並熟悉一下springcloud,並手動去搭建一個服務中心,也可參照eurake官方示例。 如果是.net core的話,實現註冊也是沒有問題的,網上教程很多,可自行度娘。 最難的就是基於Framework的專案怎麼實現註冊,跟core的實現方式區別還是蠻大的

乾貨實操:微服務Spring Cloud 系列 Eureka服務發現服務註冊(strand alone)

此篇主要實操Eureka 服務端的服務註冊,以及服務發現,並需要認證才能訪問控制中心。 分五個部分說明: 一.  認識 Eureka  二.  Eureka  服務端開發 三.  Eureka 客戶端開發 四.  多客戶端情況檢視 五.  下節預告(多個服務提供後,怎麼

4.4.5 通道均衡

4.4.5 通道均衡(二)   基本上 《XILINX FPGA的OFDM通訊系統基帶設計》一書已經帶有各部分的程式碼,我做的工作就是將程式碼整合到一起,並按照模擬修改,讓其能正常工作。本文將對實現中的重點部分做解釋,並指出需要修改的地方。   一、長訓練符

SpringCloud服務的註冊發現Eureka

一、什麼是服務註冊與發現 Spring Cloud Eureka 模組提供的功能是被動式的服務發現。 服務註冊:每個使用者去聊天室伺服器上註冊。 服務發現:這樣他的好友們就能看到你,你同時也將獲取好友的上線列表. 微服務中,服務就相當於聊天室的使用者,而服務註冊中心就像

.Net Core微服務入門全紀錄——Consul-服務註冊發現

# 前言 上一篇【[.Net Core微服務入門全紀錄(一)——專案搭建](https://www.cnblogs.com/xhznl/p/13071260.html)】講到要做到服務的靈活伸縮,那麼需要有一種機制來實現它,這個機制就是服務註冊與發現。當然這也並不是必要的,如果你的服務例項很少,並且很穩定,那

Spring Cloud服務註冊發現 Eureka【Finchley 版】

LEDE .com Go eureka clean 英文逗號 開始 效果 sam Spring Cloud(二):服務註冊與發現 Eureka【Finchley 版】 發表於 2018-04-15 | 更新於 2018-05-07 | 上一篇主要介紹了相關理論,這一

SpringCloudEureka服務註冊發現《2》actuatorEureka自我保護

1、actuator與註冊微服務資訊完善 1.1、主機名稱:服務名稱修改 1.當前問題:含有主機名或主機ip。 2.修改microservice-provider-dept-8001yml檔案: eureka:   client:&nbs

Java—內部類實現閉包回撥

前言: Java的閉包與回撥我也是第二次接觸這個概念,之前在自學Android的時候繪製View很多地方都用到了監聽器回撥,一直不是很明白,現在回頭鞏固Java的基礎總算的弄明白,儘量用我自己理解的語言來和大家分享,希望對不懂的朋友可以有一定的幫助,大神也可以

Java微服務服務消費者提供者搭建

  本文接著上一篇寫的《Java微服務(一):dubbo-admin控制檯的使用》,上篇文章介紹了docker,zookeeper環境的安裝,並參考dubbo官網演示了dubbo-admin控制檯的使用。上篇文章已經搭建好zookeeper服務註冊中心,本片文章主要搭建服務消費者和服務提供者。按照微服務的原則

服務治理:Spring Cloud Eureka服務發現消費

        Ribbon是基於HTTP和TCP的客戶端負載均衡器,可以在通過客戶端配置的ribbonServerList服務端列表去輪詢訪問達到均衡負載的作用。當其與Ribbon聯合使用時,其ribbonServerList會被DiscoveryEnalbedNIWServerList重寫,擴充套件成從E

Microsoft .NET Framework 4.5.2 (Offline Installer)

com 2012 r2 install installer frame load ram .aspx exe Microsoft .NET Framework 4.5.2 (Offline Installer) for Windows Vista SP2, Windows

WPF 實現INotifyPropertyChanged .Net Framework 4.5

hang nta not void one using style call str   自己動手寫了一個基類來實現INotifyPropertyChanged接口,以後可以直接使用。 1 using System.ComponentModel; 2

MVC .net framework 4.5 發布 瀏覽時顯示目錄

mvc 發布 瀏覽 顯示目錄問題:在IIS發布的mvc網站,瀏覽時顯示為網站目錄。 剛開始沒有註意以為mvc程序是4.0 後發現配置文件中目標框架為4.5 <system.web> <compilation targetFramework="4.5" /> <ht

由.net framework 3.5切換.net framework 4.5遇到的問題

size color none width get inf font 進行 都是 背景 由於server 2012 r2安裝.net framework3.5需要安裝光盤。Scott提出需要把舊項目.net framework升級。不再需要安裝.net framework3

.NET Framework 4.5 的五大特性

http://www.itstrike.cn/Question/10777f22-b683-45ee-a957-c38368823a01.html 介紹 從.NET4.5釋出到現在已經有一年多了。但問題是針對最近微軟釋出的版本資訊中,大部分的.NET開發人員所討論交流的只是其中的一兩個特

Five Great .NET Framework 4.5 Features (五大特性 [譯].Net 4.5 的五項強大新特性

[譯].Net 4.5 的五項強大新特性   本文原文: Five Great .NET Framework 4.5 Features 譯者: 冰河魔法師 目錄 介紹 特性一:async和aw

解決win10安裝net framework 3.5失敗問題附帶sxs檔案下載

win10安裝net framework 3.5失敗原因無非程式功能開啟失敗,解決辦法如下: 一、從win10安裝包目錄中拷貝sxs檔案到E盤根目錄下。 (2)本文使用的sxs檔案的win10安裝包下載地址: 【64位簡體中文家庭/專業版】 檔名:cn_windo

安裝mysql時提示This application requires .NET framework 4.5.2的解決辦法

安裝mysql社群版的時候報這個錯:this application requires .NET Framework 4.5.2  解決方法:到這個地址https://www.microsoft.com/en-us/download/details.aspx?id=42642

WIN10 安裝 ReportBuilder3.msi 提示需要 .NET Framework 4.5

win+r鍵調出執行視窗輸入regedit開啟登錄檔,找到HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/NET Framework Setup/NDP/v4/Client 右鍵 彈出選單中選 許可權 在彈出視窗中選中administrators,我們可以看到此管理員帳戶只有只讀許