莱芜建设网站图片合成器在线制作

pingmian/2025/10/7 19:11:08/文章来源:
莱芜建设网站,图片合成器在线制作,建设工程资质证书二维码扫描网站,软件开发模型有哪些各有什么特点概述 不同中间件#xff0c;有各自的使用方法#xff0c;代码也不一样。 可以使用Spring Cloud Stream解耦#xff0c;切换中间件时#xff0c;不需要修改代码。实现方式为使用绑定层#xff0c;绑定层对生产者和消费者提供统一的编码方式#xff0c;需要连接不同的中间…概述 不同中间件有各自的使用方法代码也不一样。 可以使用Spring Cloud Stream解耦切换中间件时不需要修改代码。实现方式为使用绑定层绑定层对生产者和消费者提供统一的编码方式需要连接不同的中间件时绑定层使用不同的绑定器即可也就是把切换中间件需要做相应的修改工作交给绑定层来做。 本文的操作是在 微服务调用链路追踪 的基础上进行。 环境说明 jdk1.8 maven3.6.3 mysql8 spring cloud2021.0.8 spring boot2.7.12 idea2022 rabbitmq3.12.4 步骤 消息生产者 创建子模块stream_producer 添加依赖 dependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-stream-rabbit/artifactId/dependency/dependencies 刷新依赖 配置application.yml server:port: 7001 spring:application:name: stream_producerrabbitmq:addresses: 127.0.0.1username: guestpassword: guestcloud:stream:bindings:output:destination: my-default #指定消息发送的目的地值为rabbit的exchange的名称binders:defaultRabbit:type: rabbit #配置默认的绑定器为rabbit 查看Source.class源码 编写生产者代码发送一条消息hello world到rabbitmq的my-default exchange中 package org.example.stream;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.stream.annotation.EnableBinding; import org.springframework.cloud.stream.messaging.Source; import org.springframework.messaging.MessageChannel; import org.springframework.messaging.support.MessageBuilder;EnableBinding(Source.class) SpringBootApplication public class StreamProductApplication implements CommandLineRunner {Autowiredprivate MessageChannel output;Overridepublic void run(String... args) throws Exception {//发送消息// messageBuilder 工具类创建消息output.send(MessageBuilder.withPayload(hello world).build());}public static void main(String[] args) {SpringApplication.run(StreamProductApplication.class, args);}} 查看rabbitmq web UI http://localhost:15672/ 看到Exchanges中还没有my-default 运行StreamProductApplication 刷新rabbitmq Web UI看到了my-dafault的exchange 消息消费者 创建子模块stream_consumer 添加依赖 dependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-stream-rabbit/artifactId/dependency/dependencies 配置application.yml server:port: 7002 spring:application:name: stream_consumerrabbitmq:addresses: 127.0.0.1username: guestpassword: guestcloud:stream:bindings:input: #内置获取消息的通道从destination配置值的exchange中获取信息destination: my-default #指定消息发送的目的地值为rabbit的exchange的名称binders:defaultRabbit:type: rabbit #配置默认的绑定器为rabbit查看内置通道名称为input 编写消息消费者启动类在启动类监听接收消息 package org.example.stream;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.stream.annotation.EnableBinding; import org.springframework.cloud.stream.annotation.StreamListener; import org.springframework.cloud.stream.messaging.Sink; import org.springframework.messaging.Message;SpringBootApplication EnableBinding(Sink.class) public class StreamConsumerApplication {StreamListener(Sink.INPUT)public void input(MessageString message){System.out.println(监听收到 message.getPayload());}public static void main(String[] args) {SpringApplication.run(StreamConsumerApplication.class, args);} } 运行stream_consumer消费者服务监听消息 运行stream_producer生产者服务发送消息 查看消费者服务控制台日志接收到了消息 优化代码 之前把生产和消费的消息都写在启动类中了代码耦合高。 优化思路是把不同功能的代码分开放。 消息生产者 stream_producer 代码结构如下 package org.example.stream.producer;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.stream.annotation.EnableBinding; import org.springframework.cloud.stream.messaging.Source; import org.springframework.messaging.MessageChannel; import org.springframework.messaging.support.MessageBuilder; import org.springframework.stereotype.Component;/*** 向中间件发送数据*/ Component EnableBinding(Source.class) public class MessageSender {Autowiredprivate MessageChannel output;//通道//发送消息public void send(Object obj){output.send(MessageBuilder.withPayload(obj).build());} }修改启动类 package org.example.stream;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.stream.annotation.EnableBinding; import org.springframework.cloud.stream.messaging.Source; import org.springframework.messaging.MessageChannel; import org.springframework.messaging.support.MessageBuilder;SpringBootApplication public class StreamProductApplication {public static void main(String[] args) {SpringApplication.run(StreamProductApplication.class, args);}} pom.xml添加junit依赖 dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdscopetest/scope /dependency 刷新依赖 编写测试类 在stream_producerm模块的src/test目录下新建org.example.stream包再建出ProducerTest类代码如下 package org.example.stream;import org.example.stream.producer.MessageSender; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;RunWith(SpringJUnit4ClassRunner.class) SpringBootTest public class ProducerTest {Autowiredprivate MessageSender messageSender;//注入发送消息工具类Testpublic void testSend(){messageSender.send(hello world);} } 消息消费者 stream_consumer代码结构如下 添加MessageListener类获取消息 package org.example.stream.consumer;import org.springframework.cloud.stream.annotation.EnableBinding; import org.springframework.cloud.stream.annotation.StreamListener; import org.springframework.cloud.stream.messaging.Sink; import org.springframework.stereotype.Component;Component EnableBinding(Sink.class) public class MessageListener {// 监听binding中的信息StreamListener(Sink.INPUT)public void input(String message){System.out.println(获取信息 message);} } 修改启动类 package org.example.stream;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.stream.annotation.EnableBinding; import org.springframework.cloud.stream.annotation.StreamListener; import org.springframework.cloud.stream.messaging.Sink; import org.springframework.messaging.Message;SpringBootApplication public class StreamConsumerApplication {public static void main(String[] args) {SpringApplication.run(StreamConsumerApplication.class, args);}} 启动consumer接收消息 执行producer单元测试类ProducerTest的testSend()方法发送消息 查看consumer控制台输出接收到信息了 代码解耦后同样能成功生产消息和消费消息。 自定义消息通道 此前使用默认的消息通道output和input。 也可以自己定义消息通道例如myoutput和myinput 消息生产者 在org.example.stream包下新建channel包在channel包下新建MyProcessor接口类 package org.example.stream.channel;import org.springframework.cloud.stream.annotation.Input; import org.springframework.cloud.stream.annotation.Output; import org.springframework.messaging.MessageChannel; import org.springframework.messaging.SubscribableChannel;/*** 自定义的消息通道*/ public interface MyProcessor {/*** 消息生产这的配置*/String MYOUTPUT myoutput;Output(myoutput)MessageChannel myoutput();/*** 消息消费者的配置*/String MYINPUT myinput;Input(myinput)SubscribableChannel myinput(); } 修改MessageSender类 package org.example.stream.producer;import org.example.stream.channel.MyProcessor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.stream.annotation.EnableBinding; import org.springframework.cloud.stream.messaging.Source; import org.springframework.messaging.MessageChannel; import org.springframework.messaging.support.MessageBuilder; import org.springframework.stereotype.Component;/*** 向中间件发送数据*/ Component EnableBinding(MyProcessor.class) public class MessageSender {Autowiredprivate MessageChannel myoutput;//通道//发送消息public void send(Object obj){myoutput.send(MessageBuilder.withPayload(obj).build());} } 修改application.yml cloud:stream:bindings:output:destination: my-default #指定消息发送的目的地myoutput:destination: custom-output 消息消费者 在stream_consumer服务的org.example.stream包下新建channel包在channel包下新建MyProcessor接口类 package org.example.stream.channel;import org.springframework.cloud.stream.annotation.Input; import org.springframework.cloud.stream.annotation.Output; import org.springframework.messaging.MessageChannel; import org.springframework.messaging.SubscribableChannel;/*** 自定义的消息通道*/ public interface MyProcessor {/*** 消息生产者的配置*/String MYOUTPUT myoutput;Output(myoutput)MessageChannel myoutput();/*** 消息消费者的配置*/String MYINPUT myinput;Input(myinput)SubscribableChannel myinput(); } 修改MessageListener类 package org.example.stream.stream;import org.example.stream.channel.MyProcessor; import org.springframework.cloud.stream.annotation.EnableBinding; import org.springframework.cloud.stream.annotation.StreamListener; import org.springframework.cloud.stream.messaging.Sink; import org.springframework.stereotype.Component;Component EnableBinding(MyProcessor.class) public class MessageListener {// 监听binding中的信息StreamListener(MyProcessor.MYINPUT)public void input(String message){System.out.println(获取信息 message);} } 修改application.yml配置 cloud:stream:bindings:input: #内置获取消息的通道从destination配置值的exchange中获取信息destination: my-default #指定消息发送的目的地myinput:destination: custom-output 测试 启动stream_consumer 运行单元测试的testSend()方法生产消息 查看stream_consumer控制台能看到生产的消息如下 获取信息hello world 消息分组 采用复制配置方式运行两个消费者 启动第一个消费者端口为7002 修改端口为7003copy configuration再启动另一个消费者 执行生产者单元测试生产消息看到两个消费者都接收到了信息 说明如果有两个消费者生产一条消息后两个消费者均能收到信息。 但当我们发送一条消息只需要其中一个消费者消费消息时这时候就需要用到消息分组发送一条消息消费者组内只有一个消费者消费到。 我们只需要在服务消费者端设置spring.cloud.stream.bindings.input.group 属性即可 重启两个消费者 修改端口号为7002重新启动第一个消费者 修改端口号为7003重新启动第二个消费者 生产者生产一条消息 查看消费者接收消息情况只有一个消费者接收到信息。 消息分区 消息分区就是实现特定消息只往特定机器发送。 修改生产者配置 cloud:stream:bindings:output:destination: my-default #指定消息发送的目的地值为rabbit的exchange的名称myoutput:destination: custom-outputproducer:partition-key-expression: payload #分区关键字 可以是对象中的id或对象partition-count: 2 #分区数量 修改消费者1的application.yml配置 server:port: 7002 spring:application:name: stream_consumerrabbitmq:addresses: 127.0.0.1username: guestpassword: guestcloud:stream:bindings:input: #内置获取消息的通道从destination配置值的exchange中获取信息destination: my-default #指定消息发送的目的地值为rabbit的exchange的名称myinput:destination: custom-outputgroup: group1 #消息分组有多个消费者时只有一个消费者接收到信息consumer:partitioned: true #开启分区支持binders:defaultRabbit:type: rabbit #配置默认的绑定器为rabbitinstance-count: 2 #消费者总数instance-index: 0 #当前消费者的索引 启动消费者1 修改消费者2的配置 server:port: 7003 spring:application:name: stream_consumerrabbitmq:addresses: 127.0.0.1username: guestpassword: guestcloud:stream:bindings:input: #内置获取消息的通道从destination配置值的exchange中获取信息destination: my-default #指定消息发送的目的地值为rabbit的exchange的名称myinput:destination: custom-outputgroup: group1 #消息分组有多个消费者时只有一个消费者接收到信息consumer:partitioned: true #开启分区支持binders:defaultRabbit:type: rabbit #配置默认的绑定器为rabbitinstance-count: 2 #消费者总数instance-index: 1 #当前消费者的索引 修改端口号为7003当前消费者的索引instance-index的值修改为1 启动消费者2 生产者发送消息看到只有Application(2)接收到消息 再用生产者发送一次消息也是Application(2)接收到消息 说明实现了消息分区 也可以更改发送的数据看是否能发送到不同消费者 修改生产者发送数据由hello world变为hello world1同时发送5次 public void testSend(){for (int i 0; i 5; i) {messageSender.send(hello world1);}} 看到hello world1全部被Application消费 所以消息分区是根据发送的消息不同发送到不同消费者中。 完成enjoy it!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/89513.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

花生壳域名直接做网站松江品划网站建设

本节主要介绍以下内容: 定时器简介 高级定时器功能框图讲解 一、定时器简介 定时器功能 :定时、输出比较、输入捕获、断路输入 定时器分类 :基本定时器、通用定时器、高级定时器 定时器资源 :F103有2个高级定时器、4个通…

做网站主要学什么网站前端

传统的DEA模型往往假设相关的是相互独立的,此时DEA模型只能计算出相对效率,无法进行效率的调整。如在碳排放分配问题上,碳排放总量保持不变,利用DEA模型只能计算出每个省份分配的相对效率,这在讨论固定资源下的碳排放配额分配问题时具有明显的局限性。在这种情况下,利用Z…

平台门户网站建设方案大连模板网站制作公司电话

考点介绍: ConcurrentHashMap是JAVA校招面试的热门考点,主要集中在1.7和1.8的底层结构和相关的性能提高。 理解这个考点要从map本身的并发问题出发,再到hashTable的低性能并发安全,引申到ConcurrentHashMap的分块处理。同时要理解…

达人室内设计网官网入口温州网站排名优化

刷题的第四天,希望自己能够不断坚持下去,迎来蜕变。😀😀😀 刷题语言:C / Python Day4 任务 ● 24. 两两交换链表中的节点 ● 19.删除链表的倒数第N个节点 ● 面试题 02.07. 链表相交 ● 142.环形链表II 1 …

网站对公司的意义接订单去哪个网站

提到C/C语言很多初学者都觉得,学到中间就进行不下去了,但是如果你最难啃的那几块硬骨头拿下,一切都会顺畅许多,而且C诞生很久了,因此有大量可以免费阅读编程文档。近日,在Quora上发现一份免费的C 资料列表&…

东莞网络营销型网站开发商城网站多少钱

https://www.elsevier.com/authors/author-schemas/latex-instructions

榆林市行政效能建设网站专门做封面的网站

现在我在听的歌,名叫《Loser》。相信你可能听过,Bigbang的。里面有句歌词是这样的:把手伸了出来,却没有任何人握住我的手。不管生活怎样,希望看到这篇文章的你,可以带着自己和带着自己的倔强,一…

做网站的开场白北京融安特智能科技营销型网站

资产列表 资产列表可展示资产树和类型树,可以查看添加的所有资产 新增资产也是在此页面 在资产树上面右键可以创建新的子节点 比如这里我新建了个“腾讯云”节点 选中腾讯云节点,点击中间的“创建”按钮,新增资产 选择你的主机类型,我这是Linux 填写你资产的名称、IP必…

淘宝客的网站怎么做开源免费cms可商业用

菱形继承的问题,是由多重继承的父类祖先是同一个父类导致的。如下面的情况: 菱形继承,会导致同名成员的二义性问题和数据冗余问题,用下面的代码来测试: class A { public:int _a; }; // class B : public A class B :…

成都建设网站费用广告网站 源码

前言 呵呵 最近想要 做一个 mongo 低版本的客户端读取高版本的服务端传递过来的数据造成的一个错误的时候, 出现了这样的问题 引入了 mongo-java-driver 之后, 使用相关 api 的时候会触发 com.mongo.internal.connection.BaseCluser 的初始化, 其依赖的 Loggers 间接的依赖…

网站的系统建设方式有哪些内容一套会员管理系统多少钱

1、 MSDN原版系统(我告诉你) [软件、镜像下载地址](https://www.imsdn.cn/)2、 HelloWindows.cn 精校 完整 极致 Windows系统下载仓储站 镜像、软件下载地址 3、系统库 镜像下载地址 4、 山己几子木 镜像下载地址

个人网站每年要多少钱拓者设计吧效果图

第一次使用react和antd组件库&#xff0c;记录过程中实用的几个组件和使用方法&#xff1b; 项目中依赖版本 "react": "^18.2.0", "antd": "^5.3.0",Input关闭历史填充 <Input placeholder"请输入ID/名称" allowClear a…

星级酒店网站建设公司企业微网站与手机微信

Vue构建项目断点调试过程问题总结 问题背景 前端开发过程中&#xff0c;碰到问题时需要debug&#xff0c;快速分析和解决问题。一般除了console.log的方式打印日志外&#xff0c;更方便直观的方式就是打断点debug。本文对vue项目debug过程可能碰到的问题进行总结&#xff0c;…

iis添加网站建设中网站建设以后主要做什么

Mocha Pro 2022 mac是一款专业的三维摄像机反求摩卡跟踪插件&#xff0c;同时也是一款视频后期效果制作工具&#xff0c;Mocha Pro 2022下载能够给数字媒体艺术家提供强大的、直观的和创新的追踪解决方案用简化的界面、加速的工作流程以及轻松追踪和操作镜头的强大性&#xff0…

虚拟主机 2个网站微信小程序 网站建设

问题描述 给定整数 n n n&#xff0c;在 O ( 1 ) O(1) O(1) 时间求出 n n n 有多少个因子。 问题背景 \qquad 目前网上求因子个数的方法的时间复杂度都是 O ( n ) O(\sqrt{n}) O(n ​) 级别的&#xff0c;但我认为一定有一种方法可以在 O ( 1 ) O(1) O(1) 的时间求出 n…

网站维护中要多久才能重新进入中国纪检监察报电子版2021

Kafka3.0之前依赖于zookeeper Zookeeper开源&#xff0c;分布式的架构&#xff0c;提供协调服务&#xff08;apache项目&#xff09; 基于观察者模式设计的分布式服务管理架构 存储和管理数据&#xff0c;分布式节点上的服务接受观察者的注册&#xff0c;一旦分布式节点上的…

设计对网站的重要性中国软件这个公司怎么样

DIY电脑一直都是电脑爱好者非常喜欢的&#xff0c;对于电脑爱好者来说&#xff0c;通过自己动手DIY组装电脑&#xff0c;不仅可以更为深刻的认识硬件&#xff0c;了解电脑主机内部结构&#xff0c;还能够学习到安装系统等知识&#xff0c;从中可以带来很多乐趣。今天我们为大家…

造价网站wordpress手机版受钱吗

设置cmd窗口的标题 1、打开.bat文件编辑 2、输入命令&#xff1a; title&#xff08;窗口标题&#xff09; 比如&#xff1a;title计算机 3、保存 4、双击运行.bat文件 &#xff0c;窗口标题改变成功 改变窗口大小 1、打开.bat文件编辑 2、输入命令&#xff1a; mode co…

前端进入网站建设公司怎么样在线编辑网页

1.查看centos内核版本 uname -a uname -r2.安装之前的准备工作 安装RabbitMQ必装Erlang(RabbitMQ官网添加链接描述) 2.1.Erlang简介 Erlang是一种通用的面向并发的编程语言&#xff0c;它由瑞典电信设备制造商爱立信所辖的CS-Lab开发&#xff0c;目的是创造一种可以应对…

如何在线上销售自己的产品优化师和运营区别

1423. 可获得的最大点数 原题地址&#xff1a; 力扣每日一题&#xff1a;可获得的最大点数 几张卡牌 排成一行&#xff0c;每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。 每次行动&#xff0c;你可以从行的开头或者末尾拿一张卡牌&#xff0c;最终你必须正好拿…