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

旅游网站模板 手机郯城建设银行网站

旅游网站模板 手机,郯城建设银行网站,济宁百度网站建设,贵阳做网站公司吗接上一篇博文 启动RabbitMQ 注意:根据版本,要提前安装Erlang的环境 这里用的版本是 RabbitMQ 4.0.9 Erlang 28.0.1 # 启动rabbitmq-server D:\rabbitmq-server-windows-4.0.9\rabbitmq_server-4.0.9>sbin\rabbitmq-server.bat通过web页面新建虚拟…

接上一篇博文

启动RabbitMQ

注意:根据版本,要提前安装Erlang的环境
这里用的版本是 RabbitMQ 4.0.9 Erlang 28.0.1

# 启动rabbitmq-server
D:\rabbitmq-server-windows-4.0.9\rabbitmq_server-4.0.9>sbin\rabbitmq-server.bat

在这里插入图片描述

通过web页面新建虚拟主机

新建虚拟主机my-virtual-host(tags:administrator),参见下图
在这里插入图片描述
建完后如下
在这里插入图片描述

Default Queue Type:

  • classic:经典队列,RabbitMQ默认的队列类型是“classic”,也就是直接的、传统的队列。在这种类型的队列中,消息被按照入队的顺序处理,每个消息都会被分发给一个消费者。
  • quorum:仲裁队列,是RabbitMQ从3.8.0版本,引入的一个新的队列类型,整个3.8.X版本,也都是在围绕仲裁队列进行完善和优化。仲裁队列相比Classic经典队列,在分布式环境下对消息的可靠性保障更高。官方文档中表示,未来会使用Quorum仲裁队列代替传统Classic队列。Quorum队列更适合于长期存在的队列,并且在对容错、数据安全方面有更严格要求的场景。相对于追求低延迟、非持久化等高级队列,Quorum队列提供了更可靠的数据复制机制,以满足对数据一致性和高可用性的要求。
  • Stream流式队列: Stream队列是RabbitMQ自3.9.0版本开始引入的一种新的数据队列类型。这种队列类型的消息是持久化到磁盘并且具备分布式备份的,更适合于消费者多,读消息非常频繁的场景。

交换机 (Exchange)

  • 交换器 (Exchange)类型

    • 1、Fanout Exchange(扇形)
    • 2、Direct Exchange(直连)
    • 3、Topic Exchange(主题)
    • 4、Headers Exchange(头部)
  • Fanout Exchange
    Fanout 扇形的,散开的; 扇形交换机
    投递到所有绑定的队列,不需要路由键,不需要进行路由键的匹配,相当于广播、群发;
    在这里插入图片描述

  • 关键代码
    application.yml

#定义要使用的交换机和队列名称
exchange:name: exchange.fanoutqueueA: queue.a
queueB: queue.bspring:application:name: fanout-exchange#配置连接 rabbitmq服务器rabbitmq:#mq服务器的iphost: 127.0.0.1#访问端口号port: 5672#用户名称username: admin#密码password: 123456#虚拟主机virtual-host: my-virtual-host

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.FanoutExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** 创建Exchange , Queue等对象* 1.创建Exchange* 2.创建Queue* 3.将Exchange和Queue绑定*/
@Configuration
public class RabbitConfig {@Value("${exchange.name}")private String exchangeName;@Value("${queueA}")private String queueA;@Value("${queueB}")private String queueB;//1.创建Exchange( 构造方法和Builder)/*** @Bean: 将方法的返回值对象放入到spring容器。*        这个方法返回值必须是对象*        默认这个bean在容器中的名称是方法名称*   name: 属性,指定bean的名称(id)*/@Beanpublic FanoutExchange fanoutExchange(){//参数: 交换机名称return new FanoutExchange(exchangeName);}//2.创建Queue(构造方法和Builder)@Beanpublic Queue queueA(){//构造方法return new Queue(queueA);}@Beanpublic Queue queueB(){//构造方法return new Queue(queueB);}//将Exchange和Queue绑定, 因为是fanout exchange无需routingkey参数@Beanpublic Binding bindingA(FanoutExchange fanoutExchange,Queue queueA){//绑定队列queueA和交换机fanoutExchangereturn BindingBuilder.bind(queueA).to(fanoutExchange);}@Beanpublic Binding bindingB(FanoutExchange fanoutExchange,Queue queueB){//绑定队列queueA和交换机fanoutExchangereturn BindingBuilder.bind(queueB).to(fanoutExchange);}}
import cn.hutool.core.date.DateUtil;
import jakarta.annotation.Resource;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;@Service
public class ProductMessageService {@Value("${exchange.name}")private String exchangeName;/*** RabbitTemplate:发送消息的对象(RedisTemplate)*/@Resourceprivate RabbitTemplate rabbitTemplate;public void sendMessage() {//发送一个文本消息, mq中消息由: 消息体和消息属性两个部分组成String text = DateUtil.now()+ ":欢迎使用扇形交换机FanoutExchange";Message message = new Message(text.getBytes());//发送消息 1:交换机名称 2:routingKey(路由键) 3.消息对象//FanoutExchange不需要routingKeyrabbitTemplate.send(exchangeName,"",message);System.out.println("---------------->发送消息完成----------------");}
}

运行结果:
在这里插入图片描述

在这里插入图片描述

  • MQ的消息包含两部分
    • 消息体body
    • 消息属性MessageProperties

Direct Exchange
根据路由键精确匹配(一模一样)进行路由消息队列;
在这里插入图片描述

实操如下
application.yml

#定义要使用的交换机和队列名称
exchange:name: exchange.directqueueA: queue.direct.a
queueB: queue.direct.bspring:application:name: fanout-exchange#配置连接 rabbitmq服务器rabbitmq:#mq服务器的iphost: 127.0.0.1#访问端口号port: 5672#用户名称username: admin#密码password: 123456#虚拟主机virtual-host: my-virtual-host
import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** 创建Exchange , Queue等对象* 1.创建Exchange* 2.创建Queue* 3.将Exchange和Queue绑定*/
@Configuration
public class RabbitConfig {@Value("${exchange.name}")private String exchangeName;@Value("${queueA}")private String queueA;@Value("${queueB}")private String queueB;//1.创建Exchange( 构造方法和Builder)/*** @Bean: 将方法的返回值对象放入到spring容器。*        这个方法返回值必须是对象*        默认这个bean在容器中的名称是方法名称*   name: 属性,指定bean的名称(id)*/@Beanpublic DirectExchange directExchange(){//参数: 交换机名称   构建器模式(buidler)return ExchangeBuilder.directExchange(exchangeName).build();}//2.创建Queue(构造方法和Builder)@Beanpublic Queue queueA(){// buidler模式, durable:表示持久化队列return QueueBuilder.durable(queueA).build();}@Beanpublic Queue queueB(){// buidler模式, durable:表示持久化队列return QueueBuilder.durable(queueB).build();}//将Exchange和Queue绑定@Beanpublic Binding bindingA(DirectExchange directExchange,Queue queueA){//绑定队列queueA和交换机directExchange, 需要routingkey( info )return BindingBuilder.bind(queueA).to(directExchange).with("info");}@Beanpublic Binding bindingB(DirectExchange directExchange,Queue queueB){//绑定队列queueA和交换机fanoutExchangereturn BindingBuilder.bind(queueB).to(directExchange).with("error");}}
import cn.hutool.core.date.DateUtil;
import jakarta.annotation.Resource;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;@Service
public class ProductMessageService {@Value("${exchange.name}")private String exchangeName;/*** RabbitTemplate:发送消息的对象(RedisTemplate)*/@Resourceprivate RabbitTemplate rabbitTemplate;public void sendMessage() {//发送一个文本消息, mq中消息由: 消息体和消息属性两个部分组成String text = DateUtil.now()+ ":欢迎使用直连交换机DirectExchange====";Message message = new Message(text.getBytes());//发送消息 1:交换机名称 2:routingKey(路由键) 3.消息对象//DirectExchange需要routingKeyrabbitTemplate.send(exchangeName,"info",message);rabbitTemplate.send(exchangeName,"error",message);System.out.println("---------------->发送消息完成----------------");}
}

运行结果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • Topic Exchange
    通配符匹配,相当于模糊匹配;
    • # 匹配多个单词,用来表示任意数量(零个或多个)单词
    • * 匹配一个单词(必须有一个,而且只有一个),用.隔开的为一个单词:
      beijing.# == beijing.queue.abc, beijing.queue.xyz.xxx,beijing.queue.a.b
      beijing.* == beijing.queue, beijing.xyz

发送时指定的路由键:lazy.orange.rabbit
在这里插入图片描述
示例代码
application.yml

#定义要使用的交换机和队列名称
exchange:name: exchange.topic
queueA: queue.topic.a
queueB: queue.topic.b
spring:application:name: topic-exchange#配置连接 rabbitmq服务器rabbitmq:#mq服务器的iphost: 127.0.0.1#访问端口号port: 5672#用户名称username: admin#密码password: 123456#虚拟主机virtual-host: my-virtual-host
import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** 创建Exchange , Queue等对象* 1.创建Exchange* 2.创建Queue* 3.将Exchange和Queue绑定*/
@Configuration
public class RabbitConfig {@Value("${exchange.name}")private String exchangeName;@Value("${queueA}")private String queueA;@Value("${queueB}")private String queueB;//1.创建Exchange( 构造方法和Builder)/*** @Bean: 将方法的返回值对象放入到spring容器。*        这个方法返回值必须是对象*        默认这个bean在容器中的名称是方法名称*   name: 属性,指定bean的名称(id)*/@Beanpublic TopicExchange topicExchange(){//参数: 交换机名称   构建器模式(buidler)return ExchangeBuilder.topicExchange(exchangeName).build();}//2.创建Queue(构造方法和Builder)@Beanpublic Queue queueA(){// buidler模式, durable:表示持久化队列return QueueBuilder.durable(queueA).build();}@Beanpublic Queue queueB(){// buidler模式, durable:表示持久化队列return QueueBuilder.durable(queueB).build();}//将Exchange和Queue绑定, 因为是fanout exchange无需routingkey参数@Beanpublic Binding bindingA(TopicExchange topicExchange,Queue queueA){//绑定队列queueA和交换机TopicExchange, 需要routingkey( info )return BindingBuilder.bind(queueA).to(topicExchange).with("*.orange.*");}@Beanpublic Binding bindingB(TopicExchange topicExchange,Queue queueB){//绑定队列queueA和交换机fanoutExchangereturn BindingBuilder.bind(queueB).to(topicExchange).with("lazy.#");}}
import cn.hutool.core.date.DateUtil;
import jakarta.annotation.Resource;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;@Service
public class ProductMessageService {@Value("${exchange.name}")private String exchangeName;/*** RabbitTemplate:发送消息的对象(RedisTemplate)*/@Resourceprivate RabbitTemplate rabbitTemplate;public void sendMessage() {//发送一个文本消息, mq中消息由: 消息体和消息属性两个部分组成String text = DateUtil.now()+ ":欢迎使用主题交换机TopicExchange====";Message message = new Message(text.getBytes());//发送消息 1:交换机名称 2:routingKey(路由键) 3.消息对象//DirectExchange需要routingKeyrabbitTemplate.send(exchangeName,"lazy.orange.rabbit",message);rabbitTemplate.send(exchangeName,"lazy.orange.rabbit",message);System.out.println("---------------->发送消息完成----------------");}
}

运行结果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • Headers Exchange(用的比较少)
    基于每条消息属性中的headers属性进行匹配;
    在这里插入图片描述
    示例代码
#定义要使用的交换机和队列名称
exchange:name: exchange.headerqueueA: queue.header.a
queueB: queue.header.bspring:application:name: header-exchange#配置连接 rabbitmq服务器rabbitmq:#mq服务器的iphost: 127.0.0.1#访问端口号port: 5672#用户名称username: admin#密码password: 123456#虚拟主机virtual-host: my-virtual-host
import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.util.HashMap;
import java.util.Map;/*** 创建Exchange , Queue等对象* 1.创建Exchange* 2.创建Queue* 3.将Exchange和Queue绑定*/
@Configuration
public class RabbitConfig {@Value("${exchange.name}")private String exchangeName;@Value("${queueA}")private String queueA;@Value("${queueB}")private String queueB;//1.创建Exchange( 构造方法和Builder)/*** @Bean: 将方法的返回值对象放入到spring容器。*        这个方法返回值必须是对象*        默认这个bean在容器中的名称是方法名称*   name: 属性,指定bean的名称(id)*/@Beanpublic HeadersExchange headersExchange(){//参数: 交换机名称   构建器模式(buidler)return ExchangeBuilder.headersExchange(exchangeName).build();}//2.创建Queue(构造方法和Builder)@Beanpublic Queue queueA(){// buidler模式, durable:表示持久化队列return QueueBuilder.durable(queueA).build();}@Beanpublic Queue queueB(){// buidler模式, durable:表示持久化队列return QueueBuilder.durable(queueB).build();}//将Exchange和Queue绑定, 因为是fanout exchange无需routingkey参数@Beanpublic Binding bindingA(HeadersExchange headersExchange,Queue queueA){//匹配条件Map<String, Object> headerValues = new HashMap<>();headerValues.put("type",1);headerValues.put("status","m");//绑定队列queueA和交换机HeadersExchangereturn BindingBuilder.bind(queueA).to(headersExchange).whereAll(headerValues).match();}@Beanpublic Binding bindingB(HeadersExchange headersExchange,Queue queueB){//匹配条件Map<String, Object> headerValues = new HashMap<>();headerValues.put("type",2);headerValues.put("status","f");//绑定队列queueA和交换机HeadersExchangereturn BindingBuilder.bind(queueB).to(headersExchange).whereAll(headerValues).match();}}
import cn.hutool.core.date.DateUtil;
import jakarta.annotation.Resource;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.core.MessageProperties;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;import java.util.HashMap;
import java.util.Map;@Service
public class ProductMessageService {@Value("${exchange.name}")private String exchangeName;/*** RabbitTemplate:发送消息的对象(RedisTemplate)*/@Resourceprivate RabbitTemplate rabbitTemplate;public void sendMessage() {//指定匹配条件,需要使用 Message的属性, 在header中增加条件Map<String, Object> headerValues = new HashMap<>();headerValues.put("type",1);headerValues.put("status","m");MessageProperties prop  = new MessageProperties();prop.setHeaders(headerValues);//使用 MessageBuilder创建消息//发送一个文本消息, mq中消息由: 消息体和消息属性两个部分组成String text = DateUtil.now()+ ":欢迎使用Header交换机HeaderExchange====";Message message = MessageBuilder.withBody(text.getBytes()).andProperties(prop).build();//发送消息 1:交换机名称 2:routingKey(路由键) 3.消息对象//HeaderExchange 不需要routingKeyrabbitTemplate.send(exchangeName,"",message);System.out.println("---------------->发送消息完成----------------");}
}

运行结果
在这里插入图片描述
在这里插入图片描述

默认交换机

  • 创建虚拟主机的时候就会创建默认交换机,默认交换机的名字是空字符串,默认交换机是直连交换机(Direct)。
  • 每新建一个队列,都会自动和默认交换机绑定,绑定的路由key是该队列的名字
  • 向默认交换机发送消息,交换机名指定为空字符串,路由key为队列的名字

文章转载自:

http://95x6k0tt.zrgsg.cn
http://IanEbJ4w.zrgsg.cn
http://eoBJD8rb.zrgsg.cn
http://KdaJ2x60.zrgsg.cn
http://pyfDCGSJ.zrgsg.cn
http://H2DghK4q.zrgsg.cn
http://ZyJLFdHE.zrgsg.cn
http://Oyx5cNof.zrgsg.cn
http://iy2T6lLo.zrgsg.cn
http://cNyF8r3M.zrgsg.cn
http://AdJywY8m.zrgsg.cn
http://uTYubK80.zrgsg.cn
http://2aQQEPQE.zrgsg.cn
http://2kfx1Vd0.zrgsg.cn
http://lolbGeme.zrgsg.cn
http://VXZuYtog.zrgsg.cn
http://3uN2y2qX.zrgsg.cn
http://8Zv1QhT2.zrgsg.cn
http://e6W74aqc.zrgsg.cn
http://Rax6Z8SV.zrgsg.cn
http://12C32Lbh.zrgsg.cn
http://YyZSCMcg.zrgsg.cn
http://XogFEwzF.zrgsg.cn
http://bAVikWFp.zrgsg.cn
http://Nd0GZyxl.zrgsg.cn
http://ZCIhkgGA.zrgsg.cn
http://Ra2UOeFm.zrgsg.cn
http://yocmtbMr.zrgsg.cn
http://3LeieXV5.zrgsg.cn
http://Jmt2fyXz.zrgsg.cn
http://www.dtcms.com/wzjs/626340.html

相关文章:

  • 家具网站策划书app设计开发团队
  • 合肥网页设计兼职网站优化文档
  • 威海网站建设哪家的好做黄图网站接广告好赚吗
  • 360网站建设网站开发进度源码
  • 向google提交网站如何建立一个网站请简述流程
  • 做h5游戏的网站平凉市建设局网站
  • 网站应急响应机制建设温州网站托管
  • 邢台学校网站建设费用wordpress电子书与公众号
  • 地方门户网站开发群晖 搭建两个wordpress
  • 苏州外贸营销网站建设韶关seo
  • 做电影网站挣钱四川手机网站设计
  • 网站建设项目环境影响评价目录广东知名网站建设
  • 贵阳培训网站建设农产品网站策划
  • 安徽网站建设获客企业wordpress怎样添加左侧菜单的功能
  • vs2013做简单的网站html的网站案例
  • 大屏手机网站如何建立自己的网站
  • 兴业大街网站建设wordpress 更新服务 搜狗
  • 电子商务网站特点wordpress 修改登录页面
  • 网站页面不更新网页设计基础知识选择题
  • 宁金诚信建设网站河北沧为信息技术有限公司
  • 换接入商网站备案黄山找人做网站
  • 奇月网络官方网站无锡做网站专业的公司
  • 物流运输做网站的素材wordpress标签云添加图片
  • jquery制作简单的网页西安网站建设优化
  • 长沙网站建设公司做网站界面需要注意什么
  • 做网站建网站什么网站都有漏洞
  • 聊城网站建设设计开发公司永州网站建设服务
  • 潍坊模板建站定制网站怎么做留言板
  • 个人网站的首页seo推广技术
  • 湖南网站建设公司企业网站建设联系