新濠天地 > 编程网新闻 > 音信队列的应用进度大致如下,新闻路由准绳

原标题:音信队列的应用进度大致如下,新闻路由准绳

浏览次数:199 时间:2019-09-26

基本概念

channel:音信通道
exchage:新闻路由法规,多种情势(topic、direct、fanout、header)

direct:默认,根据routingKey完全匹配,好处是先匹配再发送topic:根据绑定关键字通配符规则匹配、比较灵活fanout:不需要指定routingkey,相当于群发header:不太常用,可以自定义匹配规则

queue:新闻存款和储蓄
routerKey:音信路由重要字(发送的时候成为bindingkey,接收成为routingKey)

队列的定义(生产者费用者运转报错大繁多都以那个不相称导致)
durable:持久化到硬盘
exclusive:唯一性
autoDelete:自动删除

    /**     * 第二个参数:queue的持久化是通过durable=true来实现的。     * 第三个参数:exclusive:排他队列,如果一个队列被声明为排他队列,该队列仅对首次申明它的连接可见,并在连接断开时自动删除。这里需要注意三点:
      1. 排他队列是基于连接可见的,同一连接的不同信道是可以同时访问同一连接创建的排他队列;
    2.“首次”,如果一个连接已经声明了一个排他队列,其他连接是不允许建立同名的排他队列的,这个与普通队列不同;
      3.即使该队列是持久化的,一旦连接关闭或者客户端退出,该排他队列都会被自动删除的,这种队列适用于一个客户端发送读取消息的应用场景。     * 第四个参数:自动删除,如果该队列没有任何订阅的消费者的话,该队列会被自动删除。这种队列适用于临时队列。     * @param     * @return     * @Author zxj     */    @Bean    public Queue queue() {        Map<String, Object> arguments = new HashMap<>();        arguments.put("x-message-ttl", 25000);//25秒自动删除        Queue queue = new Queue("topic.messages", true, false, true, arguments);        return queue;    }

@Configurationpublic class RabbitConfig {    // 发送消息的格式转换器    @Bean    public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {        RabbitTemplate template = new RabbitTemplate(connectionFactory);        template.setMessageConverter(new Jackson2JsonMessageConverter;        return template;    }    // 接收消息的格式转换器    @Bean    public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory(ConnectionFactory connectionFactory) {        SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();        factory.setConnectionFactory(connectionFactory);        factory.setMessageConverter(new Jackson2JsonMessageConverter;        return factory;    }    // 信道配置,此地使用direct模式    @Bean    public DirectExchange defaultExchange() {        return new DirectExchange(MQConstant.EXCHANGE, true, false);    }    // 配置队列规则属性 例如保活时间 持久化 是否自动删除等    @Bean    public Queue queue() {        Map<String, Object> arguments = new HashMap<>();        arguments.put("x-message-ttl", 25000);//25秒自动删除        Queue queue = new Queue(MQConstant.QUEUE_NAME, true, false, true, arguments);        return queue;    }    // 绑定队列和exchange    @Bean    public Binding binding() {        return BindingBuilder.bind.to(defaultExchange.with(MQConstant.QUEUE_NAME);    }}如何发送@Autowiredprivate RabbitTemplate template;    //convertAndSend和send的区别是这个convert更方便使用,可以传object进去    template.convertAndSend(MQConstant.EXCHANGE, bindingKey, msg);//如何接收,注意队列名称、exchange名称、routingKey的指定。//注意:队列的消息只要被一个消费者匹配消费后就不存在了@Component@RabbitListener(containerFactory = "rabbitListenerContainerFactory", bindings = @QueueBinding(value = @Queue(value = "default_queue", durable = "true"), exchange = @Exchange(value = "default_exchange", type = ExchangeTypes.TOPIC), key = "meeting"))@Log4jpublic class RabbitMqListener {    @RabbitHandler    public void processMessage(MqMsg message) {        log.error;    }}

沟通机悠久化设置:exchange 漫长化,在宣称时钦命 durable为true

新濠天地 1

队列持久化设置:queue 持久化,在申明时钦赐 durable 为true

新濠天地 2

音信队列的行使进程大约如下:

Rabbitmq常用配置

  spring.rabbitmq.addresses指定client连接到的server的地址,多个以逗号分隔.  spring.rabbitmq.dynamic是否创建AmqpAdmin bean. 默认为: true)  spring.rabbitmq.host指定RabbitMQ host.默认为: localhost)  spring.rabbitmq.listener.acknowledge-mode指定Acknowledge的模式.  spring.rabbitmq.listener.auto-startup是否在启动时就启动mq,默认: true)  spring.rabbitmq.listener.concurrency指定最小的消费者数量.  spring.rabbitmq.listener.max-concurrency指定最大的消费者数量.  spring.rabbitmq.listener.prefetch指定一个请求能处理多少个消息,如果有事务的话,必须大于等于transaction数量.  spring.rabbitmq.listener.transaction-size指定一个事务处理的消息数量,最好是小于等于prefetch的数量.  spring.rabbitmq.password指定broker的密码.  spring.rabbitmq.port指定RabbitMQ 的端口,默认: 5672)  spring.rabbitmq.requested-heartbeat指定心跳超时,0为不指定.  spring.rabbitmq.ssl.enabled是否开始SSL,默认: false)  spring.rabbitmq.ssl.key-store指定持有SSL certificate的key store的路径  spring.rabbitmq.ssl.key-store-password指定访问key store的密码.  spring.rabbitmq.ssl.trust-store指定持有SSL certificates的Trust store.  spring.rabbitmq.ssl.trust-store-password指定访问trust store的密码.  spring.rabbitmq.username指定登陆broker的用户名.  spring.rabbitmq.virtual-host指定连接到broker的Virtual host.  spring.rabbitmq.publisher-confirms=true 开启发送确认  spring.rabbitmq.publisher-returns=true 开启发送失败退回

(1)客商端连接到信息队列服务器,张开二个channel。

(2)顾客端声惠氏个exchange,并安装相关属性。

(3)客商端声美素佳儿(Karicare)个queue,并设置相关属性。

新濠天地,(4)客商端应用routing key,在exchange和queue之间创建好绑定关系。

(5)客户端投递新闻到exchange。

三连串型的Exchange

有三种档期的顺序的Exchange:direct,fanout和topic,分裂的Exchange会议及展览现出分歧路由表现。

a)若是是Direct类型,则会将音信中的RoutingKey与该Exchange关联的全数Binding中的BindingKey实行比较,要是相等,则发送到该Binding对应的Queue中。

b)假若是Fanout类型,则会将新闻发送给全部与该 Exchange定义过Binding 的富有Queues中去,其实是一种广播行为。

c)如若是Topic类型,则会依据正则表达式,对RoutingKey与BindingKey进行相称,即便相配成功,则发送到对应的Queue中。(符号”#”相称二个或多少个词,符号”*”相配正好叁个词)

RabbitMQ帮忙音讯的悠久化

哪怕多少写在磁盘上,为了多少安全着想,作者想大多数客商都会采取长久化。音信队列持久化包含3个部分:

(1)exchange漫长化,在证明时钦定durable => 1

(2)queue长久化,在宣称时钦定durable => 1

(3)音信悠久化,在递送时钦赐delivery_mode => 2(1是非持久化)

若是exchange和queue都以长久化的,那么它们中间的binding也是长久化的。假如exchange和queue两个之间有一个长久化,一个非长久化,就不容许创建绑定。

本文由新濠天地发布于编程网新闻,转载请注明出处:音信队列的应用进度大致如下,新闻路由准绳

关键词:

上一篇:没有了

下一篇:没有了