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

打印 上一主题 下一主题

主题 511|帖子 511|积分 1533

自托管模式运行dapr

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

项目增加docker支持,取消https支持
修改Program.cs
  1. var builder = WebApplication.CreateBuilder(args);
  2. builder.Services.AddControllers();
  3. builder.Services.AddEndpointsApiExplorer();
  4. builder.Services.AddSwaggerGen();
  5. var app = builder.Build();
  6. //订阅需要用到以下方法
  7. app.UseCloudEvents();
  8. app.MapSubscribeHandler();
  9. //if (app.Environment.IsDevelopment())
  10. {
  11.     app.UseSwagger();
  12.     app.UseSwaggerUI();
  13. }
  14. app.UseAuthorization();
  15. app.MapControllers();
  16. app.Run();
复制代码
修改WeatherForecastController.cs
  1. using Dapr;
  2. using Microsoft.AspNetCore.Mvc;
  3. namespace backend.Controllers
  4. {
  5.     [ApiController]
  6.     [Route("[controller]")]
  7.     public class WeatherForecastController : ControllerBase
  8.     {
  9.         [HttpPost("TestSub")]
  10.         [Topic("pubsub", "deathStarStatus")]
  11.         public object TestSub([FromBody]string message)
  12.         {
  13.             Console.WriteLine($"TestSub deathStarStatus {message}");
  14.             return new { message = "TestSub deathStarStatus" };
  15.         }
  16.         
  17.     }
  18. }
复制代码
Topic 就是确定接收的主题
修改launchSettings.json
将applicationUrl参数改为"http://localhost:5001"

在backend项目根目录下运行
  1. dapr run --app-id backend --app-port 5001 dotnet run
复制代码
新建发布事件webapi项目,取名为front

项目增加docker支持,取消https支持
修改Program.cs,增加dapr支持

修改WeatherForecastController.cs
  1. using Dapr.Client;
  2. using Microsoft.AspNetCore.Mvc;
  3. namespace front.Controllers
  4. {
  5.     [ApiController]
  6.     [Route("[controller]")]
  7.     public class WeatherForecastController : ControllerBase
  8.     {
  9.         private readonly DaprClient _daprClient;
  10.         public WeatherForecastController(DaprClient daprClient)
  11.         {
  12.             _daprClient = daprClient;
  13.         }
  14.         [HttpPost("TestPub")]
  15.         public async Task TestPub([FromBody]string msg)
  16.         {
  17.             try
  18.             {
  19.                 await _daprClient.PublishEventAsync<string>("pubsub", "deathStarStatus", msg);
  20.             }
  21.             catch (Exception ex)
  22.             {
  23.                 Console.WriteLine(ex.ToString());
  24.             }
  25.         }
  26.     }
  27. }
复制代码
_daprClient.PublishEventAsync("pubsub", "deathStarStatus", msg); 此方法就是发布订阅
修改launchSettings.json文件,将"applicationUrl"改为 "http://localhost:5002"

在front项目根目录运行
  1. dapr run --app-id front --app-port 5002 dotnet run
复制代码
下令行发布订阅
  1. dapr publish --publish-app-id front --pubsub pubsub --topic deathStarStatus --data "hello"
复制代码

backend控制台会显示下面消息

网页发布订阅

访问front网站,Swagger UI

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

k8s模式运行dapr
  1. #初始化dapr集群
  2. dapr uninstall --all
  3. docker rm -f backend front
  4. dapr init -k
复制代码

构建docker镜像
  1. docker build -t daprbackend:v2 -f backend/Dockerfile .
  2. docker build -t daprfrontend:v2 -f front/Dockerfile .
复制代码
运行k8s项目
  1. kubectl apply -f k8s/dapr-backend.yaml
  2. kubectl apply -f k8s/dapr-front.yaml
复制代码
dapr-backend.yaml
  1. kind: Deployment
  2. apiVersion: apps/v1
  3. metadata:
  4.   name: dapr-deploy-backend
  5.   labels:
  6.     service: backend
  7. spec:
  8.   replicas: 1
  9.   selector:
  10.     matchLabels:
  11.        service: backend
  12.   template:
  13.     metadata:
  14.       labels:
  15.         service: backend
  16.       annotations:
  17.         dapr.io/enabled: "true"
  18.         dapr.io/app-id: "backend" #这里要注意app-id要与front调用的名称要一致
  19.         dapr.io/app-port: "8080"
  20.         #dapr.io/config: "dapr-config"
  21.     spec:
  22.       containers:
  23.         - name: daprbackend
  24.           image: daprbackend:v2
  25.           imagePullPolicy: Never
  26.           ports:
  27.             - name: http
  28.               containerPort: 8080
  29.               protocol: TCP
  30. ---
  31. apiVersion: v1
  32. kind: Service
  33. metadata:
  34.   name: daprbackend
  35.   labels:
  36.     service: backend
  37. spec:
  38.   type: NodePort
  39.   ports:
  40.     - port: 80
  41.       targetPort: 8080
  42.       nodePort: 30003
  43.       protocol: TCP
  44.       name: http
  45.     - port: 50001
  46.       targetPort: 50001
  47.       nodePort: 30042
  48.       protocol: TCP
  49.       name: dapr-grpc
  50.   selector:
  51.     service: backend
复制代码
dapr-front.yaml
  1. kind: Deployment
  2. apiVersion: apps/v1
  3. metadata:
  4.   name: dapr-deploy-front
  5.   labels:
  6.     service: front
  7. spec:
  8.   replicas: 1
  9.   selector:
  10.     matchLabels:
  11.        service: front
  12.   template:
  13.     metadata:
  14.       labels:
  15.         service: front
  16.       annotations:
  17.         dapr.io/enabled: "true"
  18.         dapr.io/app-id: "front"
  19.         dapr.io/app-port: "8080"
  20.         #dapr.io/config: "dapr-config"
  21.     spec:
  22.       containers:
  23.         - name: daprfrontend
  24.           image:  daprfrontend:v2
  25.           imagePullPolicy: Never
  26.           ports:
  27.             - name: http
  28.               containerPort: 8080
  29.               protocol: TCP
  30. ---
  31. apiVersion: v1
  32. kind: Service
  33. metadata:
  34.   name: daprfrontend
  35.   labels:
  36.     service: front
  37. spec:
  38.   type: NodePort
  39.   ports:
  40.     - port: 80
  41.       targetPort: 8080
  42.       nodePort: 30004
  43.       protocol: TCP
  44.       name: http
  45.     - port: 50001
  46.       targetPort: 50001
  47.       nodePort: 30041
  48.       protocol: TCP
  49.       name: dapr-grpc
  50.   selector:
  51.     service: front
复制代码
运行发布端项目

访问http://127.0.0.1:30004/swagger/index.html
运行TestPub,
终端会显示以下错误,原因是pubsub组件没运行

运行pubsub组件
  1. kubectl apply -f redis.yaml
  2. kubectl apply -f pubsub.yaml
复制代码
redis.yaml文件
  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4.   labels:
  5.     app: redis
  6.     version: v1
  7.   name: redis
  8. spec:
  9.   replicas: 1
  10.   selector:
  11.     matchLabels:
  12.       app: redis
  13.   strategy:
  14.     type: Recreate
  15.   template:
  16.     metadata:
  17.       labels:
  18.         app: redis
  19.     spec:
  20.       containers:
  21.         - name: redis
  22.           image: redis:6-alpine
  23.           imagePullPolicy: IfNotPresent
  24.           ports:
  25.           - containerPort: 6379
  26. ---
  27. apiVersion: v1
  28. kind: Service
  29. metadata:
  30.   labels:
  31.     app: redis
  32.   name: redis
  33. spec:
  34.   type: NodePort
  35.   ports:
  36.   - name: "data"
  37.     port: 6379
  38.     targetPort: 6379
  39.   selector:
  40.     app: redis
复制代码
pubsub.yaml文件
  1. apiVersion: dapr.io/v1alpha1
  2. kind: Component
  3. metadata:
  4.   name: pubsub
  5. spec:
  6.   type: pubsub.redis
  7.   version: v1
  8.   metadata:
  9.   - name: redisHost
  10.     value: redis:6379
  11.   - name: redisPassword
  12.     value: ""
复制代码
重新运行发布于订阅步伐
  1. kubectl delete -f k8s/dapr-front.yaml
  2. kubectl delete -f k8s/dapr-backend.yaml
  3. kubectl apply -f k8s/dapr-front.yaml
  4. kubectl apply -f k8s/dapr-backend.yaml
复制代码
验证明验成功

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

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

常用下令
  1. 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 --alldapr uninstall --alldocker rm -f backend frontdapr init -kdocker build -t daprbackend -f backend/Dockerfile .docker build -t daprfrontend -f front/Dockerfile .Dapr uninstall --alldapr init -kkubectl apply -f k8s/dapr-backend.yaml
  2. kubectl apply -f k8s/dapr-front.yamlpause
复制代码
参考文章

文章源码下载

点击下载
作者

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

花瓣小跑

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表