{"id":3769,"date":"2022-08-24T10:34:58","date_gmt":"2022-08-24T02:34:58","guid":{"rendered":"https:\/\/www.zeroheart.xyz\/wordpress\/?p=3769"},"modified":"2022-08-24T10:54:43","modified_gmt":"2022-08-24T02:54:43","slug":"rabbitmq%e5%bb%b6%e8%bf%9f%e9%98%9f%e5%88%97","status":"publish","type":"post","link":"https:\/\/www.zeroheart.xyz\/wordpress\/?p=3769","title":{"rendered":"rabbitMq\u5ef6\u8fdf\u961f\u5217"},"content":{"rendered":"\n<p>\u8fd9\u91cc\u53ea\u662f\u5ef6\u8fdf\u961f\u5217\u7684\u4f7f\u7528\uff0c\u66f4\u8be6\u7ec6\u7684\u4f7f\u7528\u53ef\u4ee5\u53c2\u8003\u8fd9\u7bc7\u535a\u5ba2\uff1a<a href=\"https:\/\/www.cnblogs.com\/skychenjiajun\/p\/9037324.html\">springboot\u96c6\u6210rabbitmq\uff08\u5b9e\u6218\uff09 &#8211; \u540d\u5c71\u4e36\u6df1\u5904 &#8211; \u535a\u5ba2\u56ed (cnblogs.com)<\/a><\/p>\n\n\n\n<p>RabbitMQ\u5982\u4f55\u5b9e\u73b0\u5ef6\u8fdf\u961f\u5217\uff0c\u5176\u5b9e\u5e76\u4e0d\u662f\u5b83\u63d0\u4f9b\u4e86\u5ef6\u8fdf\u961f\u5217\uff0c\u800c\u662f\u662f\u7528<strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\">\u8fc7\u671f\u65f6\u95f4+\u6b7b\u4fe1\u961f\u5217\u505a\u7684<\/mark><\/strong><\/p>\n\n\n\n<p>\u57fa\u672c\u4e0a\u5c31\u662f\u4e09\u4e2a\u6587\u4ef6<\/p>\n\n\n\n<p>\u914d\u7f6e\u3001\u751f\u4ea7\u8005\u3001\u6d88\u8d39\u8005<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>\u914d\u7f6e\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\nimport org.springframework.amqp.core.Binding;\nimport org.springframework.amqp.core.BindingBuilder;\nimport org.springframework.amqp.core.DirectExchange;\nimport org.springframework.amqp.core.Queue;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\n\/**\n * rabbitMq \u914d\u7f6e\n *\/\n@Configuration\npublic class RabbitConfig {\n    \/**\n     * \u4ea4\u6362\u673a\u7528\u4e8e\u91cd\u65b0\u5206\u914d\u961f\u5217\n     *\n     * @return\n     *\/\n    @Bean\n    DirectExchange oneExchange() {\n        return new DirectExchange(\"exchange\");\n    }\n\n    \/**\n     * \u7528\u4e8e\u5ef6\u65f6\u6d88\u8d39\u7684\u961f\u5217\n     *\n     * @return\n     *\/\n    @Bean\n    public Queue repeatTradeQueue() {\n        \/\/ durable:\u662f\u5426\u6301\u4e45\u5316,\u9ed8\u8ba4\u662ffalse,\u6301\u4e45\u5316\u961f\u5217\uff1a\u4f1a\u88ab\u5b58\u50a8\u5728\u78c1\u76d8\u4e0a\uff0c\u5f53\u6d88\u606f\u4ee3\u7406\u91cd\u542f\u65f6\u4ecd\u7136\u5b58\u5728\uff0c\u6682\u5b58\u961f\u5217\uff1a\u5f53\u524d\u8fde\u63a5\u6709\u6548\n        \/\/ exclusive:\u9ed8\u8ba4\u4e5f\u662ffalse\uff0c\u53ea\u80fd\u88ab\u5f53\u524d\u521b\u5efa\u7684\u8fde\u63a5\u4f7f\u7528\uff0c\u800c\u4e14\u5f53\u8fde\u63a5\u5173\u95ed\u540e\u961f\u5217\u5373\u88ab\u5220\u9664\u3002\u6b64\u53c2\u8003\u4f18\u5148\u7ea7\u9ad8\u4e8edurable\n        \/\/ autoDelete:\u662f\u5426\u81ea\u52a8\u5220\u9664\uff0c\u5f53\u6ca1\u6709\u751f\u4ea7\u8005\u6216\u8005\u6d88\u8d39\u8005\u4f7f\u7528\u6b64\u961f\u5217\uff0c\u8be5\u961f\u5217\u4f1a\u81ea\u52a8\u5220\u9664\u3002\n        \/\/ return new Queue(\"TestDirectQueue\",true,true,false);\n\n        Queue queue = new Queue(\"repeatTradeQueue\", true, false, false);\n        return queue;\n    }\n\n    \/**\n     * \u7ed1\u5b9a\u4ea4\u6362\u673a\u5e76\u6307\u5b9arouting key\n     *\n     * @return\n     *\/\n    @Bean\n    public Binding repeatTradeBinding() {\n        return BindingBuilder.bind(repeatTradeQueue()).to(oneExchange()).with(\"repeatTradeQueue\");\n    }\n\n    \/**\n     * \u914d\u7f6e\u6b7b\u4fe1\u961f\u5217-\u6307\u5b9a\u961f\u5217\u8fc7\u671f\u65f6\u95f4\uff0c\u5355\u4f4d\u6beb\u79d2\n     *\n     * @return\n     *\/\n    @Bean\n    public Queue deadLetterQueue() {\n        Map&lt;String, Object&gt; args = new HashMap&lt;&gt;();\n        args.put(\"x-message-ttl\", 3000);\n        args.put(\"x-dead-letter-exchange\", \"exchange\");\n        args.put(\"x-dead-letter-routing-key\", \"repeatTradeQueue\");\n        return new Queue(\"deadLetterQueue\", true, false, false, args);\n    }\n\n\n    \/**\n     * <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\">\u914d\u7f6e\u6b7b\u4fe1\u961f\u5217-\u4e0d\u6307\u5b9a\u961f\u5217\u8fc7\u671f\u65f6\u95f4\uff0c\u5c31\u53ef\u4ee5\u5b9e\u73b0\u81ea\u5df1\u5b9a\u4e49\u8fc7\u671f\u65f6\u95f4\uff0c\u5355\u4f4d\u6beb\u79d2<\/mark>\n     *\n     * @return\n     *\/\n    @Bean\n    public Queue deadLetterMsgQueue() {\n        Map&lt;String, Object&gt; args = new HashMap&lt;&gt;();\n\/\/        args.put(\"x-message-ttl\", 3000);\n        args.put(\"x-dead-letter-exchange\", \"exchange\");\n        args.put(\"x-dead-letter-routing-key\", \"repeatTradeQueue\");\n        return new Queue(\"deadLetterMsgQueue\", true, false, false, args);\n    }\n\n}\n<\/code><\/pre>\n\n\n\n<p>\u751f\u4ea7\u8005\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import org.springframework.amqp.AmqpException;\nimport org.springframework.amqp.core.AmqpTemplate;\nimport org.springframework.amqp.core.Message;\nimport org.springframework.amqp.core.MessagePostProcessor\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Component;\n\nimport java.time.LocalDateTime;\n\n\/**\n *  \u751f\u4ea7\u8005\n *\/\n@Component\npublic class RabbitProducer {\n    @Autowired\n    private AmqpTemplate rabbitTemplate;\n\n    \/**\n     * \u6b7b\u4fe1\u961f\u5217 \u6d88\u606f\u53d1\u9001\n     * @param msg\n     *\/\n    public void deadLetterSend(String msg) {\n        System.out.println(\"DeadLetterSender \u53d1\u9001\u65f6\u95f4:\" + LocalDateTime.now().toString() + \" msg\u5185\u5bb9\uff1a\" + msg);\n        rabbitTemplate.convertAndSend(\"deadLetterQueue\", msg);\n    }\n\n    \/**\n     * \u6b7b\u4fe1\u961f\u5217 \u6d88\u606f\u53d1\u9001\n     * @param msg\n     *\/\n    public void deadLetterTimeSend(String msg, long times) {\n        System.out.println(\"DeadLetterSender \u53d1\u9001\u65f6\u95f4:\" + LocalDateTime.now().toString() + \" msg\u5185\u5bb9\uff1a\" + msg);\n        MessagePostProcessor processor = new MessagePostProcessor() {\n            @Override\n            public Message postProcessMessage(Message message) throws AmqpException {\n                <mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-luminous-vivid-orange-color\">message.getMessageProperties().setExpiration(times + \"\");<\/mark>\n                return message;\n            }\n        };\n        rabbitTemplate.convertAndSend(\"deadLetterMsgQueue\", (Object) msg, processor);\n    }\n}<\/code><\/pre>\n\n\n\n<p>\u6d88\u8d39\u8005\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">import org.springframework.amqp.rabbit.annotation.RabbitHandler;\nimport org.springframework.amqp.rabbit.annotation.RabbitListener;\nimport org.springframework.stereotype.Component;\n\nimport java.time.LocalDateTime;\n\n<em>\/**\n * \u6d88\u8d39\u8005\n *\/\n<\/em>@Component\n@RabbitListener(queues = \"repeatTradeQueue\")\npublic class RabbitConsumer {\n\n    @RabbitHandler\n    public void process(String msg) {\n        System.<em>out<\/em>.println(\"repeatTradeQueue \u63a5\u6536\u65f6\u95f4:\" + LocalDateTime.<em>now<\/em>().toString() + \" \u63a5\u6536\u5185\u5bb9:\" + msg);\n    }\n}\n\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u8fd9\u91cc\u53ea\u662f\u5ef6\u8fdf\u961f\u5217\u7684\u4f7f\u7528\uff0c\u66f4\u8be6\u7ec6\u7684\u4f7f\u7528\u53ef\u4ee5\u53c2\u8003\u8fd9\u7bc7\u535a\u5ba2\uff1aspringboot\u96c6\u6210rabbitmq\uff08\u5b9e\u6218\uff09 &#038;#8 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[199],"_links":{"self":[{"href":"https:\/\/www.zeroheart.xyz\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/3769"}],"collection":[{"href":"https:\/\/www.zeroheart.xyz\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.zeroheart.xyz\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.zeroheart.xyz\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.zeroheart.xyz\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3769"}],"version-history":[{"count":15,"href":"https:\/\/www.zeroheart.xyz\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/3769\/revisions"}],"predecessor-version":[{"id":3786,"href":"https:\/\/www.zeroheart.xyz\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/3769\/revisions\/3786"}],"wp:attachment":[{"href":"https:\/\/www.zeroheart.xyz\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3769"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.zeroheart.xyz\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3769"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zeroheart.xyz\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3769"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}