经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Kubernetes » 查看文章
微服务实践k8s&dapr开发部署实验(3)订阅发布
来源:cnblogs  作者:shiningrise  时间:2024/5/29 9:10:27  对本文有异议

自托管模式运行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. }

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
  2. dapr run --app-id front --app-port 5002 dotnet run
  3. dapr publish --publish-app-id front --pubsub pubsub --topic deathStarStatus --data "hello"
  4. ::kubectl delete all --all
  5. ::dapr uninstall --all
  6. dapr uninstall --all
  7. docker rm -f backend front
  8. dapr init -k
  9. docker build -t daprbackend -f backend/Dockerfile .
  10. docker build -t daprfrontend -f front/Dockerfile .
  11. Dapr uninstall --all
  12. dapr init -k
  13. kubectl apply -f k8s/dapr-backend.yaml
  14. kubectl apply -f k8s/dapr-front.yaml
  15. pause

参考文章

文章源码下载

点击下载

作者

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

原文链接:https://www.cnblogs.com/shiningrise/p/18218164

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号