当前位置: 首页 > news >正文

c .net网站开发视频教程功能多的网站模板 中文内容

c .net网站开发视频教程,功能多的网站模板 中文内容,梅州在建高铁最新消息,台山网站开发介绍发布/订阅模式允许微服务使用消息相互通信。生产者或发布者在不知道哪个应用程序将接收它们的情况下向主题发送消息。这涉及将它们写入输入通道。同样#xff0c;消费者或订阅者订阅该主题并接收其消息#xff0c;而不知道是什么服务产生了这些消息。这涉及从输出通道接收… 介绍发布/订阅模式允许微服务使用消息相互通信。生产者或发布者在不知道哪个应用程序将接收它们的情况下向主题发送消息。这涉及将它们写入输入通道。同样消费者或订阅者订阅该主题并接收其消息而不知道是什么服务产生了这些消息。这涉及从输出通道接收消息。中间消息代理负责将每条消息从输入通道复制到所有对该消息感兴趣的订阅者的输出通道。当您需要将微服务彼此分离时这种模式特别有用。Dapr 中的发布/订阅 API 提供至少一次at-least-once的保证并与各种消息代理和队列系统集成。 您的服务所使用的特定实现是可插入的并被配置为运行时的 Dapr Pub/Sub 组件。 这种方法消除了您服务的依赖性从而使您的服务可以更便携更灵活地适应更改。Dapr 发布/订阅构建块提供了一个与平台无关的 API 来发送和接收消息。您的服务将消息发布到命名主题并订阅主题以使用这些消息。下图显示了一个“shipping”服务和一个“email”服务的例子它们都订阅了“cart”服务发布的主题。每个服务都会加载指向同一发布/订阅消息总线组件的发布/订阅组件配置文件例如 Redis Streams、NATS Streaming、Azure Service Bus 或 GCP Pub/Sub。下图具有相同的服务但是这次显示的是 Dapr 发布 API它发送“订单”主题和订阅服务上的订单端点这些主题消息由 Dapr 发布到。特性Cloud Events消息格式为了启用消息路由并为每条消息提供额外的上下文Dapr 使用 CloudEvents 1.0 规范作为其消息格式。应用程序使用 Dapr 发送到主题的任何消息都会自动“包装”在 Cloud Events 信封中使用 datacontenttype 属性的 Content-Type 标头值。Dapr 实现了以下 Cloud Events 字段idsourcespecversiontypedatacontenttype (Optional)以下示例显示了 CloudEvent v1.0 中序列化为 JSON 的 XML 内容{specversion : 1.0,type : xml.message,source : https://example.com/message,subject : Test XML Message,id : id-1234-5678-9101,time : 2020-09-23T06:23:21Z,datacontenttype : text/xml,data : notetoUser1/tofromuser2/frommessagehi/message/note }消息订阅Dapr 应用程序可以订阅已发布的主题。 Dapr 允许您的应用程序订阅主题的两种方法声明式其中订阅在外部文件中定义程序化在用户代码中定义订阅消息传递原则上当订阅者在处理消息后以非错误响应进行响应时Dapr 认为消息已成功传递。为了进行更精细的控制Dapr 的发布/订阅 API 还提供了在响应负载中定义的显式状态订阅者可以使用这些状态向 Dapr 指示特定的处理指令例如 RETRY 或 DROP。如果两个不同的应用程序不同的 app-ID订阅了同一个主题Dapr 将每条消息只传递给每个应用程序的一个实例。主题范围默认情况下所有支持 Dapr 发布/订阅组件例如 Kafka、Redis Stream、RabbitMQ的主题都可用于配置了该组件的每个应用程序。为了限制哪个应用程序可以发布或订阅主题Dapr 提供了主题范围。这使您能够允许应用程序发布哪些主题以及允许应用程序订阅哪些主题。消息生存时间(TTL)Dapr 可以在每条消息的基础上设置超时消息这意味着如果没有从 pub/sub 组件读取消息则该消息将被丢弃。这是为了防止堆积未读的消息。在队列中比配置的 TTL 时间长的消息称为死消息。注也可以在组件创建时为给定队列设置消息 TTL。与不使用 Dapr 和 CloudEvents 的应用程序通信对于一个应用程序使用 Dapr 而另一个应用程序不使用的场景可以为发布者或订阅者禁用 CloudEvent 包装。这允许在不能一次全部采用 Dapr 的应用程序中部分采用 Dapr 发布订阅。使用.Net调用Dapr的发布订阅以下示例创建应用程序来发布和订阅名为 deathStarStatus 的主题先决条件运行 dapr init 时Redis Streams 默认安装在本地机器上。如果是 dapr init --slim 需要自己动手操作一些东西了这里就不演示了。通过打开您的组件文件进行验证 %UserProfile%\.dapr\components\pubsub.yamlapiVersion: dapr.io/v1alpha1 kind: Component metadata:name: pubsub spec:type: pubsub.redisversion: v1metadata:- name: redisHostvalue: localhost:6379- name: redisPasswordvalue: 注这里redisHost的value可以根据实际情况设置比如某云的redis实例等。又有人问过是否可以切换默认db当然可以name设置redisDBvalue设置为你要使用的db即可如果你要更详细的yaml配置参数比如并发设置、最大重试次数等等都可以看这里 https://docs.dapr.io/reference/components-reference/supported-pubsub/setup-redis-pubsub/订阅主题订阅主题有两种方式声明式、程序化声明式订阅您可以使用以下自定义资源定义 (CRD) 订阅主题。创建一个名为 subscription.yaml 的文件并粘贴以下内容apiVersion: dapr.io/v1alpha1 kind: Subscription metadata:name: myevent-subscription spec:topic: deathStarStatusroute: /dsstatuspubsubname: pubsub scopes: - app1 - app2上面的示例显示了对 pubsub 组件 pubsub 主题 deathStarStatus 的事件订阅。将CRD文件放到组件目录即可这里不继续展开说了。程序化订阅Dapr 实例在启动时调用您的应用程序并期待主题订阅的 JSON 响应pubsubnameDapr 应该使用哪个 pub/sub 组件topic订阅哪个主题route当消息涉及该主题时Dapr 调用哪个endpoint注你可能会觉得这是不是很麻烦是的所以我们用dapr dotnet-sdk来帮助我们自动完成这些事情.Net订阅以上是让dapr sidecar知道这个消息的订阅最终给谁。但我们的程序里要怎么写呢如果你选择的是声明式订阅你做一个route即可而如果是程序化订阅则不需要多写一个yaml文件且通过特性即可支持接下来看看.Net SDK怎么做的吧。创建Assignment.Server(Sub)创建ASP.NET Core 空项目同时根据之前的文章内容添加Dapr.AspNetCoreNuGet包和修改程序端口为5000修改program.cs代码using Microsoft.AspNetCore.Mvc;var builder WebApplication.CreateBuilder(args); var app builder.Build();app.UseRouting(); app.UseCloudEvents(); app.UseEndpoints(endpoints {endpoints.MapSubscribeHandler(); });app.MapPost(/dsstatus, ([FromBody] string word) Console.WriteLine($Hello {word}!)).WithTopic(pubsub, deathStarStatus);app.Run();注为了告诉 Dapr 消息已成功处理请返回 200 OK 响应。如果 Dapr 收到除 200 之外的任何其他返回状态代码或者如果您的应用程序崩溃Dapr 将尝试按照 At-Least-Once 语义重新传递消息。运行Assignment.Server使用Dapr CLI来启动先使用命令行工具跳转到目录 dapr-study-room\Assignment06\Assignment.Server然后执行下面命令dapr run --app-id testpubsub --app-port 5000 --dapr-http-port 3500 --dapr-grpc-port 50001 dotnet run创建Assignment.Client(Publish)创建控制台项目并修改program.csvar client new Dapr.Client.DaprClientBuilder().Build(); await client.PublishEventAsyncstring(pubsub, deathStarStatus, World);运行Assignment.Client即可看到Assignment.Server中会打印Hello World!将消息路由到不同的事件处理程序基于内容的路由是一种使用 DSL 而不是命令式应用程序代码的消息传递模式。PubSub 路由是此模式的一种实现它允许开发人员使用表达式根据 CloudEvents 的内容将其路由到应用程序中的不同 URI/路径和事件处理程序。注这是个预览功能如果你感兴趣可自行尝试值得一提的是Common Expression Language (CEL)很有趣这里就只贴一段代码看看吧。[Topic(pubsub, inventory, event.type \widget\, 1)][HttpPost(widgets)]public async TaskActionResultStock HandleWidget(Widget widget, [FromServices] DaprClient daprClient){// Logicreturn stock;}[Topic(pubsub, inventory, event.type \gadget\, 2)][HttpPost(gadgets)]public async TaskActionResultStock HandleGadget(Gadget gadget, [FromServices] DaprClient daprClient){// Logicreturn stock;}[Topic(pubsub, inventory)][HttpPost(products)]public async TaskActionResultStock HandleProduct(Product product, [FromServices] DaprClient daprClient){// Logicreturn stock;}发布/订阅主题访问权限命名空间或组件范围可用于限制对特定应用程序的组件访问。添加到组件的这些应用程序范围仅限制具有特定 ID 的应用程序能够使用该组件。除了这个通用组件范围之外发布/订阅组件还可以限制以下内容可以使用哪些主题已发布或已订阅允许哪些应用程序发布到特定主题允许哪些应用程序订阅特定主题主题访问权限apiVersion: dapr.io/v1alpha1 kind: Component metadata:name: pubsubnamespace: default spec:type: pubsub.redisversion: v1metadata:- name: redisHostvalue: localhost:6379- name: redisPasswordvalue: - name: publishingScopesvalue: app1topic1;app2topic2,topic3;app3- name: subscriptionScopesvalue: app2;app3topic1下表显示了允许哪些应用程序发布到主题中topic1topic2topic3app1Xapp2XXapp3下表显示了允许哪些应用程序订阅主题topic1topic2topic3app1XXXapp2app3X注如果应用程序未列出例如 subscriptionScopes 中的 app1则允许订阅所有主题。由于未使用 allowedTopics 且 app1 没有任何订阅范围因此它还可以使用上面未列出的其他主题。限制允许的主题如果 Dapr 应用程序向其发送消息则会创建一个主题。在某些情况下应该控制这个主题的创建。例如在Dapr应用程序中在生成主题名称时出现的错误可能导致创建无限数量的主题  精简主题名称和总数防止主题无限增长apiVersion: dapr.io/v1alpha1 kind: Component metadata:name: pubsubnamespace: default spec:type: pubsub.redisversion: v1metadata:- name: redisHostvalue: localhost:6379- name: redisPasswordvalue: - name: allowedTopicsvalue: topic1,topic2,topic3结合 allowedTopics 和 scopes有时您希望组合这两个作用域因此只允许一组固定的主题并将作用域指定给特定的应用程序。  apiVersion: dapr.io/v1alpha1 kind: Component metadata:name: pubsubnamespace: default spec:type: pubsub.redisversion: v1metadata:- name: redisHostvalue: localhost:6379- name: redisPasswordvalue: - name: allowedTopicsvalue: A,B- name: publishingScopesvalue: app1A- name: subscriptionScopesvalue: app1;app2A注第三个应用程序没有列出因为如果一个应用程序没有在范围内指定它是允许使用所有主题的。下表显示了允许发布到主题的应用程序ABCapp1Xapp2XXapp3XX下表显示了哪个应用程序可以订阅主题:  ABCapp1app2Xapp3XX消息TTL同状态管理使用 metadata 的 ttlInSeconds本章源码Assignment06https://github.com/doddgu/dapr-study-room我们正在行动新的框架、新的生态我们的目标是自由的、易用的、可塑性强的、功能丰富的、健壮的。所以我们借鉴Building blocks的设计理念正在做一个新的框架MASA Framework它有哪些特点呢原生支持Dapr且允许将Dapr替换成传统通信方式架构不限单体应用、SOA、微服务都支持支持.Net原生框架降低学习负担除特定领域必须引入的概念坚持不造新轮子丰富的生态支持除了框架以外还有组件库、权限中心、配置中心、故障排查中心、报警中心等一系列产品核心代码库的单元测试覆盖率90%开源、免费、社区驱动还有什么我们在等你一起来讨论经过几个月的生产项目实践已完成POC目前正在把之前的积累重构到新的开源项目中目前源码已开始同步到Github文档站点在规划中会慢慢完善起来MASA.BuildingBlocksMASA.ContribMASA.UtilsMASA.EShopBlazorComponentMASA.BlazorQQ群7424099微信群加技术运营微信MasaStackTechOps备注来意邀请进群
http://www.zqtcl.cn/news/757552/

相关文章:

  • 网站优化的基本思想企业网站建设和运营
  • 网站开发电销常遇到问题怎么建立一个群
  • worldpress 建站少儿编程加盟费一般多少钱
  • 哪个公司做网站建设好九一人才网赣州招聘官网
  • 城阳区规划建设局网站哈尔滨网站建设好
  • 中小型网站建设价位无锡有哪些互联网公司
  • 网站内容收费jquery 网站框架
  • 自己建网站买玩具外贸网站如何做推广
  • 网站 配色表注册公司有什么风险
  • 网站管理员登陆后缀重庆建筑证书查询网站
  • 义乌seoseo建站外贸
  • 只做早餐的网站老网站做seo能不能重新注册
  • 门户网站开发需要多少钱百姓网网站源码
  • 网站设计要学哪些保山网站建设
  • 怎样免费设计网站建设企业网站系统源码
  • 海报设计模板网站找网络公司做网站需要注意
  • 网站开发前端后端书籍wordpress 加文章列表
  • 泰安北京网站建设商业网站的后缀一般为
  • 必须网站的访问量wordpress标题大小
  • qq怎么做放资源的网站英语seo什么意思
  • 学生心理健康网站建设论文php开源内容管理系统
  • 机关网站内容建设雄安专业网站建设
  • 有域名有空间怎么做网站怎么制作网站封面
  • 注册域名哪个网站好信息技术制作网站首页
  • 企业网站app制作价格国外外链平台
  • 泉州市网站设计企业网络有限公司经营范围
  • 电子商务网站创业计划书后台管理系统登录
  • 蚂蚁建站网页传奇游戏单职业
  • 标准通网站建设广州 flash 网站
  • 怎么做游戏自动充值的网站淘宝购物平台