国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Spring整合RabbitMQ-配制文件方式-1-消息生產(chǎn)者

這篇具有很好參考價(jià)值的文章主要介紹了Spring整合RabbitMQ-配制文件方式-1-消息生產(chǎn)者。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Spring-amqp是對AMQP的一些概念的一些抽象,Spring-rabbit是對RabbitMQ操作的封裝實(shí)現(xiàn)。

主要有幾個(gè)核心類RabbitAdmin、RabbitTemplateSimpleMessageListenerContainer

RabbitAdmin類完成對Exchange、Queue、Binding的操作,在容器中管理 了RabbitAdmin類的時(shí)候,可以對Exchange、Queue、Binding進(jìn)行自動聲明。

RabbitTemplate類是發(fā)送和接收消息的工具類。

SimpleMessageListenerContainer是消費(fèi)消息的容器。

目前一些比較新的項(xiàng)目會使用基于注解的方式,而比較老的一些項(xiàng)目可能還是基于配制文件的方式。

此處使用的Spring依賴為:

            <dependency>
                <groupId>org.springframework.amqp</groupId>
                <artifactId>spring-rabbit</artifactId>
                <version>2.2.7.RELEASE</version>
            </dependency>
消息的生產(chǎn)者
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.core.MessageProperties;
import org.springframework.amqp.core.MessagePropertiesBuilder;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Product {

    public static void main(String[] args) throws Exception {
        AbstractApplicationContext context = new ClassPathXmlApplicationContext("spring-rabbit.xml");


        RabbitTemplate template = context.getBean(RabbitTemplate.class);


        MessagePropertiesBuilder propertiesBuilder = MessagePropertiesBuilder.newInstance();
        propertiesBuilder.setContentEncoding("gbk");
        propertiesBuilder.setContentType(MessageProperties.CONTENT_TYPE_TEXT_PLAIN);


        Message msg = MessageBuilder.withBody("hello world".getBytes("gbk"))
                .andProperties(propertiesBuilder.build()).build();

        template.convertAndSend("ex.direct", "routing.q1", msg);


        context.close();
    }
}

spring-rabbit.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:rabbit="http://www.springframework.org/schema/rabbit"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/rabbit
    http://www.springframework.org/schema/rabbit/spring-rabbit.xsd">

    <!--配制連接工廠-->
    <rabbit:connection-factory id="connectFactory"
                               host="node1" virtual-host="/"
                               username="root" password="123456"
                               port="5672"
    ></rabbit:connection-factory>


    <!--用于自動向RabbitMQ聲明隊(duì)列、交換器、綁定 等操作工具類-->
    <rabbit:admin id="rabbitAdmin" connection-factory="connectFactory"></rabbit:admin>


    <!--用于簡化操作的模板類-->
    <rabbit:template connection-factory="connectFactory" id="rabbitTemplate" />


    <!--聲明隊(duì)列隊(duì)列-->
    <rabbit:queue id="msg1" name="queue.msg" durable="false" exclusive="false" auto-delete="false" ></rabbit:queue>

    <!--聲明交換器-->
    <rabbit:direct-exchange name="ex.direct" durable="false" auto-delete="false" id="directExchange" >
        <rabbit:bindings>
            <!--key表示綁定鍵-->
            <!--queue表示將交換器綁定到哪個(gè)消息隊(duì)列,使用隊(duì)列換id,不要使用Bean的name-->
            <!--exchange表示交接交換器綁定到哪個(gè)交換器。-->
            <rabbit:binding queue="msg1" key="routing.q1" ></rabbit:binding>
        </rabbit:bindings>
    </rabbit:direct-exchange>


</beans>

運(yùn)行生產(chǎn)者的代碼,便可查看數(shù)據(jù)已經(jīng)發(fā)送成功

[root@nullnull-os ~]# rabbitmqctl list_exchanges --formatter pretty_table
Listing exchanges for vhost / ...
┌────────────────────┬─────────┐
│ name               │ type    │
├────────────────────┼─────────┤
│ amq.fanout         │ fanout  │
├────────────────────┼─────────┤
│ ex.busi.topic      │ topic   │
├────────────────────┼─────────┤
│ amq.rabbitmq.trace │ topic   │
├────────────────────┼─────────┤
│ amq.headers        │ headers │
├────────────────────┼─────────┤
│ amq.topic          │ topic   │
├────────────────────┼─────────┤
│ amq.direct         │ direct  │
├────────────────────┼─────────┤
│ ex.direct          │ direct  │
├────────────────────┼─────────┤
│                    │ direct  │
├────────────────────┼─────────┤
│ ex.routing         │ direct  │
├────────────────────┼─────────┤
│ amq.match          │ headers │
└────────────────────┴─────────┘
[root@nullnull-os ~]# rabbitmqctl list_bindings --formatter pretty_table
Listing bindings for vhost /...
┌─────────────┬─────────────┬──────────────────┬──────────────────┬─────────────┬───────────┐
│ source_name │ source_kind │ destination_name │ destination_kind │ routing_key │ arguments │
├─────────────┼─────────────┼──────────────────┼──────────────────┼─────────────┼───────────┤
│             │ exchange    │ queue.msg        │ queue            │ queue.msg   │           │
├─────────────┼─────────────┼──────────────────┼──────────────────┼─────────────┼───────────┤
│ ex.direct   │ exchange    │ queue.msg        │ queue            │ routing.q1  │           │
└─────────────┴─────────────┴──────────────────┴──────────────────┴─────────────┴───────────┘
[root@nullnull-os ~]# rabbitmqctl list_queues --formatter pretty_table
Timeout: 60.0 seconds ...
Listing queues for vhost / ...
┌───────────┬──────────┐
│ name      │ messages │
├───────────┼──────────┤
│ queue.msg │ 1        │
└───────────┴──────────┘
[root@nullnull-os ~]# 

可以觀察到數(shù)據(jù)已經(jīng)成功的發(fā)送了。

遇到的問題:

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.amqp.rabbit.config.BindingFactoryBean#0': Cannot resolve reference to bean 'queue.msg' while setting bean property 'destinationQueue'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'queue.msg' available
	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:342)
	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:113)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1699)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1444)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:594)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:226)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:876)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:878)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550)
	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:144)
	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:85)
	at com.nullnull.learn.Product.main(Product.java:18)
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'queue.msg' available
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:814)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1282)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:297)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:330)
	... 15 more

問題原因:

    <rabbit:direct-exchange name="ex.direct" durable="false" auto-delete="false" id="directExchange" >
        <rabbit:bindings>
            <rabbit:binding queue="queue.msg" key="routing.q1" ></rabbit:binding>
        </rabbit:bindings>
    </rabbit:direct-exchange>

此處要配制的是隊(duì)列的id,而不是隊(duì)列的名稱。

修改后:文章來源地址http://www.zghlxwxcb.cn/news/detail-697195.html

 <!--聲明交換器-->
    <rabbit:direct-exchange name="ex.direct" durable="false" auto-delete="false" id="directExchange" >
        <rabbit:bindings>
            <!--key表示綁定鍵-->
            <!--queue表示將交換器綁定到哪個(gè)消息隊(duì)列,使用隊(duì)列換id,不要使用Bean的name-->
            <!--exchange表示交接交換器綁定到哪個(gè)交換器。-->
            <rabbit:binding queue="msg1" key="routing.q1" ></rabbit:binding>
        </rabbit:bindings>
    </rabbit:direct-exchange>

到了這里,關(guān)于Spring整合RabbitMQ-配制文件方式-1-消息生產(chǎn)者的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【RabbitMQ筆記08】消息隊(duì)列RabbitMQ之防止消息丟失的三種方式(生產(chǎn)者消息確認(rèn)、消費(fèi)者消息確認(rèn)、消息持久化)

    【RabbitMQ筆記08】消息隊(duì)列RabbitMQ之防止消息丟失的三種方式(生產(chǎn)者消息確認(rèn)、消費(fèi)者消息確認(rèn)、消息持久化)

    這篇文章,主要介紹消息隊(duì)列RabbitMQ之防止消息丟失的三種方式(生產(chǎn)者消息確認(rèn)、消費(fèi)者消息確認(rèn)、消息持久化)。 目錄 一、防止消息丟失 1.1、消息確認(rèn)機(jī)制(生產(chǎn)者) (1)生產(chǎn)者丟失消息 (2)生產(chǎn)者消息確認(rèn)機(jī)制 1.2、消息確認(rèn)機(jī)制(消費(fèi)者) (1)消費(fèi)者丟失消息

    2024年02月02日
    瀏覽(29)
  • 第二章 Spring Boot 整合 Kafka消息隊(duì)列 生產(chǎn)者

    第一章 Kafka 配置部署及SASL_PLAINTEXT安全認(rèn)證 第二章??Spring Boot 整合 Kafka消息隊(duì)列?生產(chǎn)者 第三章??Spring Boot 整合 Kafka消息隊(duì)列?消息者 ????????Kafka 是一個(gè)消息隊(duì)列產(chǎn)品,基于Topic partitions的設(shè)計(jì),能達(dá)到非常高的消息發(fā)送處理性能。本文主是基于Spirng Boot封裝了Apache 的

    2024年01月25日
    瀏覽(18)
  • 消息隊(duì)列-RabbitMQ:延遲隊(duì)列、rabbitmq 插件方式實(shí)現(xiàn)延遲隊(duì)列、整合SpringBoot

    消息隊(duì)列-RabbitMQ:延遲隊(duì)列、rabbitmq 插件方式實(shí)現(xiàn)延遲隊(duì)列、整合SpringBoot

    1、延遲隊(duì)列概念 延時(shí)隊(duì)列內(nèi)部是有序的 , 最重要的特性 就體現(xiàn)在它的 延時(shí)屬性 上,延時(shí)隊(duì)列中的元素是希望在指定時(shí)間到了以后或之前取出和處理,簡單來說, 延時(shí)隊(duì)列就是用來存放需要在指定時(shí)間被處理的元素的隊(duì)列。 延遲隊(duì)列使用場景: 訂單在十分鐘之內(nèi)未支付則

    2024年02月22日
    瀏覽(20)
  • Spring Boot 整合 RabbitMQ 實(shí)現(xiàn)延遲消息

    Spring Boot 整合 RabbitMQ 實(shí)現(xiàn)延遲消息

    消息隊(duì)列(Message Queuing,簡寫為 MQ)最初是為了解決金融行業(yè)的特定業(yè)務(wù)需求而產(chǎn)生的。慢慢的,MQ 被應(yīng)用到了更多的領(lǐng)域,然而商業(yè) MQ 高昂的價(jià)格讓很多初創(chuàng)公司望而卻步,于是 AMQP(Advanced Message Queuing Protocol,高級消息隊(duì)列協(xié)議)應(yīng)運(yùn)而生。 隨著 AMQP 草案的發(fā)布,兩個(gè)月

    2024年04月08日
    瀏覽(29)
  • 消息隊(duì)列——spring和springboot整合rabbitmq

    消息隊(duì)列——spring和springboot整合rabbitmq

    目錄 spring整合rabbitmq——生產(chǎn)者 rabbitmq配置文件信息 倒入生產(chǎn)者工程的相關(guān)代碼 簡單工作模式 spring整合rabbitmq——消費(fèi)者 spring整合rabbitmq——配置詳解 SpringBoot整合RabbitMQ——生產(chǎn)者 ?SpringBoot整合RabbitMQ——消費(fèi)者 ? 使用原生amqp來寫應(yīng)該已經(jīng)沒有這樣的公司了 創(chuàng)建兩個(gè)工程

    2024年02月16日
    瀏覽(28)
  • 實(shí)戰(zhàn):Spring Cloud Stream消息驅(qū)動框架整合rabbitMq

    實(shí)戰(zhàn):Spring Cloud Stream消息驅(qū)動框架整合rabbitMq

    相信很多同學(xué)都開發(fā)過WEB服務(wù),在WEB服務(wù)的開發(fā)中一般是通過緩存、隊(duì)列、讀寫分離、削峰填谷、限流降級等手段來提高服務(wù)性能和保證服務(wù)的正常投用。對于削峰填谷就不得不用到我們的MQ消息中間件,比如適用于大數(shù)據(jù)的kafka,性能較高支持事務(wù)活躍度高的rabbitmq等等,MQ的

    2024年02月08日
    瀏覽(27)
  • Spring整合RabbitMQ-注解方式

    maven導(dǎo)入 5.2.1 消息的生產(chǎn)者 RabbitConfig 提示: ConnectionFactory有三個(gè)實(shí)現(xiàn) CachingConnectionFactory 基于channel的緩存模式 最常用是這個(gè)。 LocalizedQueueConnectionFactory 直接連接某個(gè)節(jié)點(diǎn)的方式。如果是集群,此種不太適合。 SimpleRoutingConnectionFactory 在當(dāng)前的連接工廠中按查找的KEY獲取連接

    2024年02月09日
    瀏覽(21)
  • 【RabbitMQ】RabbitMQ 消息的可靠性 —— 生產(chǎn)者和消費(fèi)者消息的確認(rèn),消息的持久化以及消費(fèi)失敗的重試機(jī)制_rabbitmq 生產(chǎn)者消息確認(rèn)

    【RabbitMQ】RabbitMQ 消息的可靠性 —— 生產(chǎn)者和消費(fèi)者消息的確認(rèn),消息的持久化以及消費(fèi)失敗的重試機(jī)制_rabbitmq 生產(chǎn)者消息確認(rèn)

    先自我介紹一下,小編浙江大學(xué)畢業(yè),去過華為、字節(jié)跳動等大廠,目前阿里P7 深知大多數(shù)程序員,想要提升技能,往往是自己摸索成長,但自己不成體系的自學(xué)效果低效又漫長,而且極易碰到天花板技術(shù)停滯不前! 因此收集整理了一份《2024年最新大數(shù)據(jù)全套學(xué)習(xí)資料》,

    2024年04月26日
    瀏覽(66)
  • RabbitMQ消息可靠性(一)-- 生產(chǎn)者消息確認(rèn)

    RabbitMQ消息可靠性(一)-- 生產(chǎn)者消息確認(rèn)

    目錄 前言 一、消息確認(rèn)流程圖 二、生產(chǎn)者消息確認(rèn) 1、publisher-confirm(發(fā)送者確認(rèn)) 2、publisher-return(發(fā)送者回執(zhí)) 三、代碼實(shí)現(xiàn) 1、修改application.yml 配置 2、ConfirmCallback函數(shù)和ReturnCallback函數(shù) 在項(xiàng)目中,引入了RabbitMQ這一中間件,必然也需要在業(yè)務(wù)中增加對數(shù)據(jù)安全性的一

    2024年02月04日
    瀏覽(23)
  • RabbitMq生產(chǎn)者發(fā)送消息確認(rèn)

    RabbitMq生產(chǎn)者發(fā)送消息確認(rèn)

    一般情況下RabbitMq的生產(chǎn)者能夠正常的把消息投遞到交換機(jī)Exchange,Exchange能夠根據(jù)路由鍵routingKey把消息投遞到隊(duì)列Queue,但是一旦出現(xiàn)消息無法投遞到交換機(jī)Exchange,或無法路由到Queue的這種特殊情況下,則需要對生產(chǎn)者的消息進(jìn)行緩存或者保存到數(shù)據(jù)庫,后續(xù)在調(diào)查完RabbitM

    2024年02月04日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包