首页 > 其他分享 >微服务实践k8s&dapr开发部署实验(1)服务调用

微服务实践k8s&dapr开发部署实验(1)服务调用

时间:2024-05-22 15:54:01浏览次数:21  
标签:服务 name -- app dapr front k8s backend

前置条件

dapr 自托管模式运行

新建一个webapi无权限项目

image
launchSettings.json中applicationUrl端口改成5001,如下:

"applicationUrl": "http://localhost:5001"   
//WeatherForecastController.cs更改如下
using Microsoft.AspNetCore.Mvc;

namespace backend.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(Name = "GetWeatherForecast")]
        public IEnumerable<WeatherForecast> Get()
        {
            return Enumerable.Range(1, 5).Select(index => new WeatherForecast
            {
                Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
                TemperatureC = Random.Shared.Next(-20, 55),
                Summary = Summaries[Random.Shared.Next(Summaries.Length)]
            })
            .ToArray();
        }

        [HttpPost(Name = "Hello")]
        public object SayHello()
        {
            return new { message = "Hello" }; //这里返回必须是json对象,如果为字符串,则在daprClient.InvokeMethodAsync调用时会出错
        }
    }
}

到backend目录运行运行下面命令:

dapr run --app-id backend --app-port 5001 dotnet run

然后运行:

dapr invoke --app-id backend --method WeatherForecast  
dapr invoke --app-id backend --method WeatherForecast --verb GET

显示下图表示运行成功
image

dapr服务调用

新建一个名为front的weiapi无权限项目
launchSettings.json中applicationUrl端口改成5002,如下:

"applicationUrl": "http://localhost:5002"   

添加nuget包:Dapr.Client
修改WeatherForecastController.cs如下:

using Dapr.Client;
using Microsoft.AspNetCore.Mvc;

namespace front.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class WeatherForecastController : ControllerBase
    {

        [HttpPost(Name = "Hello")]
        public async Task<string> HelloAsync()
        {
            var appId = "backend";
            var methodName = "WeatherForecast";

            using (var daprClient = new DaprClientBuilder().Build())
            {
                try
                {
                    var result = await daprClient.InvokeMethodAsync<object>(HttpMethod.Post, appId, methodName);
                    Console.WriteLine(result);
                    return result.ToString();
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"An exception occurred while invoking method: '{methodName}' on app-id: '{appId}'");
                    Console.WriteLine(ex.ToString());
                }
            }
            return "Error!";
        }
    }
}

访问http://http://localhost:5002/swagger/页面运行如下就成功了
image

k8s&dapr模式运行

Dapr uninstall --all
dapr init -k

新增docker支持
image

添加backend的k8s配置文件dapr-backend.yaml

kind: Deployment
apiVersion: apps/v1
metadata:
  name: dapr-deploy-backend
  labels:
    service: backend
spec:
  replicas: 2
  selector:
    matchLabels:
       service: backend
  template:
    metadata:
      labels:
        service: backend
      annotations:
        dapr.io/enabled: "true"
        dapr.io/app-id: "backend" #这里要注意app-id要与front调用的名称要一致
        dapr.io/app-port: "8080"
        #dapr.io/config: "dapr-config"
    spec:
      containers:
        - name: daprbackend
          image: daprbackend
          imagePullPolicy: Never
          ports:
            - name: http
              containerPort: 8080
              protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
  name: daprbackend
  labels:
    service: backend
spec:
  type: NodePort
  ports:
    - port: 80
      targetPort: 8080
      nodePort: 30003
      protocol: TCP
      name: http
    - port: 50001
      targetPort: 50001
      nodePort: 30042
      protocol: TCP
      name: dapr-grpc
  selector:
    service: backend

添加backend的k8s配置文件dapr-backend.yaml

kind: Deployment
apiVersion: apps/v1
metadata:
  name: dapr-deploy-front
  labels:
    service: front
spec:
  replicas: 1
  selector:
    matchLabels:
       service: front
  template:
    metadata:
      labels:
        service: front
      annotations:
        dapr.io/enabled: "true"
        dapr.io/app-id: "front"
        dapr.io/app-port: "8080"
        #dapr.io/config: "dapr-config"
    spec:
      containers:
        - name: daprfrontend
          image:  daprfrontend
          imagePullPolicy: Never
          ports:
            - name: http
              containerPort: 8080
              protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
  name: daprfrontend
  labels:
    service: front
spec:
  type: NodePort
  ports:
    - port: 80
      targetPort: 8080
      nodePort: 30002
      protocol: TCP
      name: http
    - port: 50001
      targetPort: 50001
      nodePort: 30041
      protocol: TCP
      name: dapr-grpc
  selector:
    service: front

启动批处理文件start-all.bat

docker build -t daprbackend -f backend/Dockerfile .
docker build -t daprfrontend -f front/Dockerfile .

Dapr uninstall --all
dapr init -k
kubectl apply -f k8s/dapr-backend.yaml
kubectl apply -f k8s/dapr-front.yaml

pause

停止批处理文件stop-all.bat

kubectl delete -f ./k8s/dapr-front.yaml 
kubectl delete -f ./k8s/dapr-backend.yaml 
	
Dapr uninstall --all

pause

运行成功验证

image
image
访问http://localhost:30002/swagger/index.html
显示如下说明已经成功
image

项目源码下载

项目源码下载

常用命令

dapr uninstall
Dapr uninstall --all
dapr init
dapr init -k
dapr run --app-id myapp --dapr-http-port 3500 --dapr-grpc-port 50001 -- dotnet run   #运行.net项目
dapr run --app-id backend --app-port 5001 dotnet run
dapr invoke --app-id backend --method WeatherForecast  #调用接口
dapr invoke --app-id backend --method WeatherForecast --verb GET

相关文章

标签:服务,name,--,app,dapr,front,k8s,backend
From: https://www.cnblogs.com/shiningrise/p/18206124

相关文章

  • golang微服务之go-zero零基础实战
    golang微服务之go-zero零基础实战1.环境准备mysql提供rpc服务接口后端交互存储etcd提供rpc服务注册与发现2.文件结构rpc服务接口:1.用户登录2.用户创建3.查询用户信息api服务接口:1.用户登录2.用户创建3.查询用户信息3.搭建步骤1.搭建rpc服务创建rpc......
  • Eureka 服务注册中心
    注册中心相当于微服务架构中的“通讯录”,它记录了服务和服务地址的映射关系。在分布式架构中,服务会注册到注册中心,当服务需要调用其他服务时,就到这里找到服务的地址,进行调用。服务注册中心的作用就是服务的注册和服务的发现。常见注册中心的对比Eureka注册中心三种角色......
  • 搭建服务器正向代理
    使用Squid搭建代理服务器1、安装Squidyuminstallsquid2、配置Squid编辑配置文件/etc/squid/squid.conf,根据需要进行设置,例如设置监听端口、允许的客户端IP等3、启动Squid服务systemctlstartsquidsystemctlenablesquid4、配置客户端以使用代理你需要在客户端的网络......
  • k8s——statefulset
    statefulset基础模版[root@masterstatefulset]#catweb.yaml---apiVersion:v1kind:Servicemetadata:name:nginxlabels:app:nginxspec:ports:-port:80name:webclusterIP:Noneselector:app:nginx---apiVersion:apps/v1ki......
  • 使用winsw 将 spring boot jar包注册称服务
    下载地址:ReleaseWinSWv2.10.3·winsw/winsw·GitHub下载winsw,使用版本WinSWv2.10.3版修改文件名  修改配置<configuration><!--安装成Windows服务后的服务名--><id>nacosConsumer</id><!--显示的服务名称--><name>nacosConsumer</name>&......
  • 3分钟部署 我的世界(Minecraft) 联机服务
    游戏简介我的世界(Minecraft)是一款沙盒类电子游戏,该游戏以玩家在一个充满着方块的三维空间中自由地创造和破坏不同种类的方块为主题。玩家在游戏中可以在单人或多人模式中通过摧毁或创造精妙绝伦的建筑物和艺术,或者收集物品探索地图以完成游戏的成就(进度)。部署服务第一步:选择配......
  • minikube 搭建 k8s 单机环境
    准备linux环境uname-acat/etc/os-release查看linux环境查看linux发行版本,可以在/etc目录下找到以release结尾的文件,这个一般就是记录发行版本的文件准备docker环境需要有一个镜像打包的工具安装dockersudoyuminstalldocker如果提示没有找到软件,那么需要配置一下软......
  • Ubuntu 服务器采用Systemed管理Tomcat服务自动启动
    1、新建Systemed配置文件参考以下配置文件样例sudovim/lib/systemd/system/tomcat.service2、重新加载Systemed配置信息sudosystemctldaemon-reload3、打开自动启动Tomcatsudosystemctlenabletomcat.service4、启动Tomcatsudosystemctlstarttomcat.service......
  • 微服务相关面试题
    什么是微服务?微服务,又称微服务架构,是一种架构风格,它将应用程序构建为以业务领域为模型的小型自治服务集合。简单来说就是把一个项目拆分成独立的多个服务,并且多个服务是可以独立运行的,而每个服务都会占用线程。微服务之间是如何进行通信的?同步通信方案:对外REST,对内RPC。......
  • 通过ansible自动化部署apache服务 转载
    目录1安装ansible2ansible配置3创建角色目录4创建角色内的目录结构5编写tasks/main.yml6编写templates/index.html.j27创建playbook8运行playbook9验证结果10验证后卸载apache 使用Ansible来部署Apache服务是一个很好的选择,因......