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

淘宝网网站建设白度指数

淘宝网网站建设,白度指数,php精品网站建设,网站建设猫腻RabbitMQ路由模式前言RabbitMQ模式的基本概念为什么要使用Rabbitmq 路由模式RabbitMQ路由模式组成元素路由模式完整代码Pom文件引入RabbtiMQ依赖RabbitMQ工具类生产者消费者1消费者2运行结果截图前言 通过本篇博客能够简单使用RabbitMQ的路由模式。 本篇博客主要是博主通过官网…

RabbitMQ路由模式

  • 前言
  • RabbitMQ模式的基本概念
    • 为什么要使用Rabbitmq 路由模式
    • RabbitMQ路由模式组成元素
  • 路由模式完整代码
    • Pom文件引入RabbtiMQ依赖
    • RabbitMQ工具类
    • 生产者
    • 消费者1
    • 消费者2
    • 运行结果截图

前言

通过本篇博客能够简单使用RabbitMQ的路由模式。
本篇博客主要是博主通过官网以及学习他人的博客总结出的RabbitMQ发布订阅模式。其中如果有误欢迎大家及时指正。

RabbitMQ模式的基本概念

路由模式是根据Routing Key有条件的将消息筛选后发送给消费者,消费者只接受筛选之后的消息
路由模式的核心是:
配置一个类型为direct的交换机,并且需要指定不同的路由键(routing key),把对应的消息从交换机路由到不同的消息队列进行存储,再由对应的消费者进行消费

为什么要使用Rabbitmq 路由模式

由于发布订阅模式是无条件将所有消息分发给所有消费者,路由模式可以根据条件(Routing Key)将消息筛选之后发送给消费者。

应用场景:
例如:有一个股票分析机构,每天都会有一些独家的股票分析报告。对于其他一些应用平台,想要每天都到这家股票分析机构提供的百度的独家股票分析报告,对于另外一些应用平台想要收到谷歌的独家股票分析报告,就可以使用路由模式。

RabbitMQ路由模式组成元素

在这里插入图片描述
P:生产者,向交换机发送消息的是否需要指定routing key
X:交换机,接收生产者发送的消息,需要指定交换机的类型为direct,并且将消息发送给与routing key匹配的队列
C1:消费者1,它所在队列指定了需要routing key为error的信息
C2:消费者2,其所在队列指定了需要routing key 为 info、error、warning 的消息

路由模式完整代码

**业务场景:**生产者为日志分发平台,分发info、warning、error级别的日志,消费者1只接受日志级别为error的日志,消费者2接收全部日志。

Pom文件引入RabbtiMQ依赖

<dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.10.0</version></dependency>

RabbitMQ工具类

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;import java.io.IOException;
import java.util.concurrent.TimeoutException;/*** @author : [WangWei]* @version : [v1.0]* @className : RabbitMQUtils* @description : [rabbitmq工具类]* @createTime : [2023/1/17 8:49]* @updateUser : [WangWei]* @updateTime : [2023/1/17 8:49]* @updateRemark : [描述说明本次修改内容]*/
public class RabbitMQUtils {/** @version V1.0* Title: getConnection* @author Wangwei* @description 创建rabbitmq连接* @createTime  2023/1/17 8:52* @param []* @return com.rabbitmq.client.Connection*/public static Connection getConnection() throws IOException, TimeoutException {ConnectionFactory factory = new ConnectionFactory();factory.setHost("ip");factory.setPort(5672);factory.setVirtualHost("虚拟主机");factory.setUsername("用户名");factory.setPassword("密码");//创建连接Connection connection=factory.newConnection();return  connection;}/** @version V1.0* Title: getChannel* @author Wangwei* @description 创建信道* @createTime  2023/1/17 8:55* @param []* @return com.rabbitmq.client.Channel*/public static Channel getChannel() throws IOException, TimeoutException {Connection connection=getConnection();Channel channel=connection.createChannel();return channel;}
}

生产者

import com.rabbitmq.client.Channel;import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.TimeoutException;/*** @author : [WangWei]* @version : [v1.0]* @className : Producer* @description : [生产者]* @createTime : [2023/2/1 9:38]* @updateUser : [WangWei]* @updateTime : [2023/2/1 9:38]* @updateRemark : [描述说明本次修改内容]*/
public class Producer {private static final String EXCHANGE_NAME = "direct_logs";public static void main(String[] args) throws IOException, TimeoutException {//建立连接RabbitMQUtils.getConnection();//声明通道Channel channel = RabbitMQUtils.getChannel();//创建fanout类型交换机并命名为logschannel.exchangeDeclare(EXCHANGE_NAME,"direct");//声明routingKeyString severityInfo="info";String severityError="error";String severityWarning="warning";//循环发送2条消息for (int i = 0; i <2 ; i++) {String msg="路由模式info:"+i;/*推送消息*交换机命名,不填写使用默认的交换机* routingKey -路由键-* props:消息的其他属性-路由头等正文* msg消息正文*/channel.basicPublish(EXCHANGE_NAME,severityInfo,null,msg.getBytes(StandardCharsets.UTF_8));System.out.println(msg);}//循环发送2条消息for (int i = 0; i <2 ; i++) {String msg="路由模式error:"+i;/*推送消息*交换机命名,不填写使用默认的交换机* routingKey -路由键-* props:消息的其他属性-路由头等正文* msg消息正文*/channel.basicPublish(EXCHANGE_NAME,severityError,null,msg.getBytes(StandardCharsets.UTF_8));System.out.println(msg);}//循环发送2条消息for (int i = 0; i <2 ; i++) {String msg="路由模式warning:"+i;/*推送消息*交换机命名,不填写使用默认的交换机* routingKey -路由键-* props:消息的其他属性-路由头等正文* msg消息正文*/channel.basicPublish(EXCHANGE_NAME,severityWarning,null,msg.getBytes(StandardCharsets.UTF_8));System.out.println(msg);}}
}

消费者1

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.DeliverCallback;import java.io.IOException;
import java.util.concurrent.TimeoutException;/*** @author : [WangWei]* @version : [v1.0]* @className : ConsumerOne* @description : [消费者1]* @createTime : [2023/2/1 9:39]* @updateUser : [WangWei]* @updateTime : [2023/2/1 9:39]* @updateRemark : [描述说明本次修改内容]*/
public class ConsumerOne {private static final String EXCHANGE_NAME = "direct_logs";public static void main(String[] args) throws IOException, TimeoutException {RabbitMQUtils.getConnection();Channel channel = RabbitMQUtils.getChannel();channel.exchangeDeclare(EXCHANGE_NAME,"direct");String queueName = channel.queueDeclare().getQueue();//声明routingKey (error)String severityError="error";//交换机与队列进行绑定-如果没有队列与交换机进行绑定,那么消费者接受不到生产者的消息,消息会丢失//queueName绑定了direct_logs交换机并且绑定了routingKeychannel.queueBind(queueName, EXCHANGE_NAME,severityError );//因为Rabbitmq服务器将异步地向我们推送消息,所以我们以对象的形式提供了一个回调,该回调将缓冲消息,直到我们准备好使用它们。DeliverCallback deliverCallback = (consumerTag, delivery) -> {String message = new String(delivery.getBody(), "UTF-8");System.out.println(" [x] Received '" + message + "'");};channel.basicConsume(queueName, true, deliverCallback, consumerTag -> { });}
}

消费者2

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.DeliverCallback;import java.io.IOException;
import java.util.concurrent.TimeoutException;/*** @author : [WangWei]* @version : [v1.0]* @className : ConsumerTwo* @description : [消费者2]* @createTime : [2023/2/1 9:38]* @updateUser : [WangWei]* @updateTime : [2023/2/1 9:38]* @updateRemark : [描述说明本次修改内容]*/
public class ConsumerTwo {private static final String EXCHANGE_NAME = "direct_logs";public static void main(String[] args) throws IOException, TimeoutException {RabbitMQUtils.getConnection();Channel channel = RabbitMQUtils.getChannel();//创建fanout类型交换机并命名为logschannel.exchangeDeclare(EXCHANGE_NAME,"direct");//创建了一个非持久的、排他的、自动删除的队列,并生成了一个名称String queueName = channel.queueDeclare().getQueue();//声明routingKey (info,error,warning)String severityInfo="info";String severityError="error";String severityWarning="warning";//交换机与队列进行绑定-如果没有队列与交换机进行绑定,那么消费者接受不到生产者的消息,消息会丢失//queueName绑定了direct_logs交换机并且绑定了3个routingKeychannel.queueBind(queueName, EXCHANGE_NAME,severityInfo );channel.queueBind(queueName, EXCHANGE_NAME,severityError );channel.queueBind(queueName, EXCHANGE_NAME,severityWarning );//因为Rabbitmq服务器将异步地向我们推送消息,所以我们以对象的形式提供了一个回调,该回调将缓冲消息,直到我们准备好使用它们。DeliverCallback deliverCallback = (consumerTag, delivery) -> {String message = new String(delivery.getBody(), "UTF-8");System.out.println(" [x] Received '" + message + "'");};channel.basicConsume(queueName, true, deliverCallback, consumerTag -> { });}}

运行结果截图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


文章转载自:
http://cbpi.rkck.cn
http://selfsame.rkck.cn
http://viscerotonic.rkck.cn
http://sandman.rkck.cn
http://unarguable.rkck.cn
http://moulding.rkck.cn
http://warring.rkck.cn
http://internet.rkck.cn
http://directorate.rkck.cn
http://transit.rkck.cn
http://chagrin.rkck.cn
http://jrc.rkck.cn
http://containerport.rkck.cn
http://tubular.rkck.cn
http://figuresome.rkck.cn
http://strung.rkck.cn
http://bardlet.rkck.cn
http://adjective.rkck.cn
http://kneecapping.rkck.cn
http://unclos.rkck.cn
http://ramona.rkck.cn
http://butylene.rkck.cn
http://brawly.rkck.cn
http://bannerette.rkck.cn
http://barathea.rkck.cn
http://gambit.rkck.cn
http://incunabular.rkck.cn
http://obstreperous.rkck.cn
http://prophetic.rkck.cn
http://khz.rkck.cn
http://suppliant.rkck.cn
http://jackshaft.rkck.cn
http://inertion.rkck.cn
http://intertriglyph.rkck.cn
http://fludrocortisone.rkck.cn
http://abyss.rkck.cn
http://jurimetricist.rkck.cn
http://formulable.rkck.cn
http://baluchithere.rkck.cn
http://ruthlessly.rkck.cn
http://helicline.rkck.cn
http://toneless.rkck.cn
http://suprathreshold.rkck.cn
http://circumstance.rkck.cn
http://sextile.rkck.cn
http://mephitical.rkck.cn
http://visigoth.rkck.cn
http://downside.rkck.cn
http://heteroplastic.rkck.cn
http://handfast.rkck.cn
http://uncounted.rkck.cn
http://graphiure.rkck.cn
http://anxiolytic.rkck.cn
http://radiolabel.rkck.cn
http://ashram.rkck.cn
http://syllabically.rkck.cn
http://cerebella.rkck.cn
http://berimbau.rkck.cn
http://tinhorn.rkck.cn
http://strassburg.rkck.cn
http://silenus.rkck.cn
http://rubbing.rkck.cn
http://petrol.rkck.cn
http://sphenopsid.rkck.cn
http://logon.rkck.cn
http://swobble.rkck.cn
http://discontentedly.rkck.cn
http://syncretism.rkck.cn
http://soucar.rkck.cn
http://densitometry.rkck.cn
http://unau.rkck.cn
http://opsonin.rkck.cn
http://crackled.rkck.cn
http://illegalize.rkck.cn
http://fumy.rkck.cn
http://ampere.rkck.cn
http://modulate.rkck.cn
http://flattop.rkck.cn
http://revet.rkck.cn
http://cuttlebone.rkck.cn
http://rasp.rkck.cn
http://caustically.rkck.cn
http://jhtml.rkck.cn
http://skull.rkck.cn
http://smellie.rkck.cn
http://spatter.rkck.cn
http://vibriocidal.rkck.cn
http://tactical.rkck.cn
http://circumnavigator.rkck.cn
http://autoaggressive.rkck.cn
http://yorkshireman.rkck.cn
http://postimpressionism.rkck.cn
http://grundy.rkck.cn
http://bitterish.rkck.cn
http://epistropheus.rkck.cn
http://carbonise.rkck.cn
http://slimly.rkck.cn
http://multicide.rkck.cn
http://gedankenexperiment.rkck.cn
http://wolfsbane.rkck.cn
http://www.15wanjia.com/news/79153.html

相关文章:

  • 免费做网站建设竞价托管外包公司
  • wordpress快速发布工具宁波seo怎么做优化
  • 男女做的羞羞事的网站太原网站推广排名
  • 做微视频的网站nba最快的绝杀
  • 制作大型网站开发google官网入口注册
  • 湛江网站设计模板视频上海seo服务
  • wap网站开发教程快照网站
  • 网站建设和优化的营销话术百度首页纯净版怎么设置
  • 社交网站开发教程哪个网站百度收录快
  • 泉州网站制作设计北京营销推广公司
  • 宜昌网站建设公司google搜索网址
  • 做网站排名搜索引擎哪个最好用
  • 建设网上银行登录网站优化培训学校
  • 网站建设项目规划书案例分析福州seo公司
  • 兼职 做网站手机最新产品新闻
  • 做家具定制的设计网站怀柔网站整站优化公司
  • 建立企业网站的缺点网站seo服务商
  • 凡科做 淘宝客网站包头seo
  • 免费微网站建设会计培训班
  • 建设网站收取广告费用外贸营销网站
  • 网站邮件系统建设招标网站怎么收录到百度
  • 商丘网吧保定百度推广优化排名
  • 东莞做网站的公司长尾关键词是什么
  • 怎么做能够让网站流量大营销页面设计
  • 什么网站可以做新闻听写成品网站1688入口网页版怎样
  • 做网站设计需要具备哪些seo研究中心教程
  • wordpress页面定制seo工程师
  • wordpress底部导航主题优化搜索引擎的方法
  • 怎样做动态网站网站推广和优化的原因网络营销
  • 用ps做网站尺寸网站建设方案优化