项目增加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();
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" }; } }}
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
修改Program.cs,增加dapr支持
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()); } } }}
using Dapr.Client;
namespace front.Controllers
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项目控制台会显示接受到订阅消息
#初始化dapr集群dapr uninstall --alldocker rm -f backend frontdapr init -k
#初始化dapr集群
dapr uninstall --all
docker rm -f backend front
dapr init -k
docker build -t daprbackend:v2 -f backend/Dockerfile .docker build -t daprfrontend:v2 -f front/Dockerfile .
docker build -t daprbackend:v2 -f backend/Dockerfile .
docker build -t daprfrontend:v2 -f front/Dockerfile .
kubectl apply -f k8s/dapr-backend.yamlkubectl apply -f k8s/dapr-front.yaml
kubectl apply -f k8s/dapr-backend.yaml
kubectl apply -f k8s/dapr-front.yaml
dapr-backend.yaml
kind: DeploymentapiVersion: apps/v1metadata: name: dapr-deploy-backend labels: service: backendspec: 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: v1kind: Servicemetadata: name: daprbackend labels: service: backendspec: 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
kind: Deployment
apiVersion: apps/v1
metadata:
name: dapr-deploy-backend
labels:
service: backend
spec:
replicas: 1
selector:
matchLabels:
template:
annotations:
dapr.io/enabled: "true"
dapr.io/app-id: "backend" #这里要注意app-id要与front调用的名称要一致
dapr.io/app-port: "8080"
#dapr.io/config: "dapr-config"
containers:
- name: daprbackend
image: daprbackend:v2
imagePullPolicy: Never
ports:
- name: http
containerPort: 8080
protocol: TCP
---
apiVersion: v1
kind: Service
name: daprbackend
type: NodePort
- port: 80
targetPort: 8080
nodePort: 30003
name: http
- port: 50001
targetPort: 50001
nodePort: 30042
name: dapr-grpc
dapr-front.yaml
kind: DeploymentapiVersion: apps/v1metadata: name: dapr-deploy-front labels: service: frontspec: 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: v1kind: Servicemetadata: name: daprfrontend labels: service: frontspec: 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
name: dapr-deploy-front
service: front
dapr.io/app-id: "front"
- name: daprfrontend
image: daprfrontend:v2
name: daprfrontend
nodePort: 30004
nodePort: 30041
访问http://127.0.0.1:30004/swagger/index.html
运行TestPub,
终端会显示以下错误,原因是pubsub组件没运行
kubectl apply -f redis.yamlkubectl apply -f pubsub.yaml
kubectl apply -f redis.yaml
kubectl apply -f pubsub.yaml
redis.yaml文件
apiVersion: apps/v1kind: Deploymentmetadata: labels: app: redis version: v1 name: redisspec: 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: v1kind: Servicemetadata: labels: app: redis name: redisspec: type: NodePort ports: - name: "data" port: 6379 targetPort: 6379 selector: app: redis
app: redis
version: v1
name: redis
strategy:
type: Recreate
- name: redis
image: redis:6-alpine
imagePullPolicy: IfNotPresent
- containerPort: 6379
- name: "data"
port: 6379
targetPort: 6379
pubsub.yaml文件
apiVersion: dapr.io/v1alpha1kind: Componentmetadata: name: pubsubspec: type: pubsub.redis version: v1 metadata: - name: redisHost value: redis:6379 - name: redisPassword value: ""
apiVersion: dapr.io/v1alpha1
kind: Component
name: pubsub
type: pubsub.redis
- name: redisHost
value: redis:6379
- name: redisPassword
value: ""
重新运行发布于订阅程序
kubectl delete -f k8s/dapr-front.yamlkubectl delete -f k8s/dapr-backend.yamlkubectl apply -f k8s/dapr-front.yamlkubectl apply -f k8s/dapr-backend.yaml
kubectl delete -f k8s/dapr-front.yaml
kubectl delete -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 --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.yamlkubectl apply -f k8s/dapr-front.yamlpause
::kubectl delete all --all
::dapr uninstall --all
docker build -t daprbackend -f backend/Dockerfile .
docker build -t daprfrontend -f front/Dockerfile .
Dapr uninstall --all
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