当前位置: 代码网 > it编程>编程语言>Javascript > 微服务实践k8s&dapr开发部署实验(3)订阅发布

微服务实践k8s&dapr开发部署实验(3)订阅发布

2024年08月02日 Javascript 我要评论
项目增加docker支持,取消https支持修改Program.cs修改WeatherForecastController.csTopic 就是确定接收的主题修改launchSettings.json将applicationUrl参数改为"http://localhost:5001"在backend项目根目录下运行。

自托管模式运行dapr

新建订阅webapi项目,取名为backend

项目增加docker支持,取消https支持

修改program.cs

var builder = webapplication.createbuilder(args);
builder.services.addcontrollers();

builder.services.addendpointsapiexplorer();
builder.services.addswaggergen();

var app = builder.build();

//订阅需要用到以下方法
app.usecloudevents();
app.mapsubscribehandler();

//if (app.environment.isdevelopment())
{
    app.useswagger();
    app.useswaggerui();
}

app.useauthorization();

app.mapcontrollers();

app.run();

修改weatherforecastcontroller.cs

using dapr;
using microsoft.aspnetcore.mvc;

namespace backend.controllers
{
    [apicontroller]
    [route("[controller]")]
    public class weatherforecastcontroller : controllerbase
    {
        [httppost("testsub")]
        [topic("pubsub", "deathstarstatus")]
        public object testsub([frombody]string message)
        {
            console.writeline($"testsub deathstarstatus {message}");

            return new { message = "testsub deathstarstatus" };
        }
        
    }
}

topic 就是确定接收的主题

修改launchsettings.json

将applicationurl参数改为"http://localhost:5001"

在backend项目根目录下运行

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

新建发布事件webapi项目,取名为front

项目增加docker支持,取消https支持

修改program.cs,增加dapr支持

修改weatherforecastcontroller.cs

using dapr.client;
using microsoft.aspnetcore.mvc;

namespace front.controllers
{
    [apicontroller]
    [route("[controller]")]
    public class weatherforecastcontroller : controllerbase
    {
        private readonly daprclient _daprclient;

        public weatherforecastcontroller(daprclient daprclient)
        {
            _daprclient = daprclient;
        }

        [httppost("testpub")]
        public async task testpub([frombody]string msg)
        {
            try
            {
                await _daprclient.publisheventasync<string>("pubsub", "deathstarstatus", msg);
            }
            catch (exception ex)
            {
                console.writeline(ex.tostring());
            }
        }
    }
}

_daprclient.publisheventasync(“pubsub”, “deathstarstatus”, msg); 此方法就是发布订阅

修改launchsettings.json文件,将"applicationurl"改为 “http://localhost:5002”

在front项目根目录运行

dapr run --app-id front --app-port 5002 dotnet run 

命令行发布订阅

dapr publish --publish-app-id front --pubsub pubsub --topic deathstarstatus --data "hello"

backend控制台会显示下面消息

网页发布订阅

访问front网站,swagger ui

运行testpub后,backend项目控制台会显示接受到订阅消息

k8s模式运行dapr

#初始化dapr集群
dapr uninstall --all
docker rm -f backend front
dapr init -k

构建docker镜像

docker build -t daprbackend:v2 -f backend/dockerfile .
docker build -t daprfrontend:v2 -f front/dockerfile .

运行k8s项目

kubectl apply -f k8s/dapr-backend.yaml
kubectl apply -f k8s/dapr-front.yaml

dapr-backend.yaml

kind: deployment
apiversion: apps/v1
metadata:
  name: dapr-deploy-backend
  labels:
    service: backend
spec:
  replicas: 1
  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:v2
          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

dapr-front.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:v2
          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: 30004
      protocol: tcp
      name: http
    - port: 50001
      targetport: 50001
      nodeport: 30041
      protocol: tcp
      name: dapr-grpc
  selector:
    service: front

运行发布端项目

访问http://127.0.0.1:30004/swagger/index.html

运行testpub,

终端会显示以下错误,原因是pubsub组件没运行

运行pubsub组件

kubectl apply -f redis.yaml
kubectl apply -f pubsub.yaml

redis.yaml文件

apiversion: apps/v1
kind: deployment
metadata:
  labels:
    app: redis
    version: v1
  name: redis
spec:
  replicas: 1
  selector:
    matchlabels:
      app: redis
  strategy:
    type: recreate
  template:
    metadata:
      labels:
        app: redis
    spec:
      containers:
        - name: redis
          image: redis:6-alpine
          imagepullpolicy: ifnotpresent
          ports:
          - containerport: 6379

---

apiversion: v1
kind: service
metadata:
  labels:
    app: redis
  name: redis
spec:
  type: nodeport
  ports:
  - name: "data"
    port: 6379
    targetport: 6379
  selector:
    app: redis

pubsub.yaml文件

apiversion: dapr.io/v1alpha1
kind: component
metadata:
  name: pubsub
spec:
  type: pubsub.redis
  version: v1
  metadata:
  - name: redishost
    value: redis:6379
  - name: redispassword
    value: ""

重新运行发布于订阅程序

kubectl delete -f k8s/dapr-front.yaml
kubectl delete -f k8s/dapr-backend.yaml

kubectl apply -f k8s/dapr-front.yaml
kubectl apply -f k8s/dapr-backend.yaml

验证实验成功

访问 http://127.0.0.1:30004/swagger/index.html

查看订阅端的日志,收到信息“wxy",就表示实验成功

常用命令

dapr run --app-id backend --app-port 5001 dotnet run 
dapr run --app-id front --app-port 5002 dotnet run 
dapr publish --publish-app-id front --pubsub pubsub --topic deathstarstatus --data "hello"

::kubectl delete all --all
::dapr uninstall --all

dapr uninstall --all
docker rm -f backend front
dapr init -k

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

参考文章

文章源码下载

作者

吴晓阳,微信号:shiningrise,email:shiningrise@qq.com

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com