您好,登錄后才能下訂單哦!
使用spring boot如何實(shí)現(xiàn)對RabbitMQ進(jìn)行整合?很多新手對此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
springboot集成RabbitMQ非常簡單,如果只是簡單的使用配置非常少,springboot提供了spring-boot-starter-amqp項(xiàng)目對消息各種支持。
1.新建一個(gè)Spring Boot工程,命名為:“rabbitmq-hello”。
在pom.xml中引入如下依賴內(nèi)容,其中spring-boot-starter-amqp用于支持RabbitMQ。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency>
2.在application.properties中配置關(guān)于RabbitMQ的連接和用戶信息,用戶可以回到上面的安裝內(nèi)容,在管理頁面中創(chuàng)建用戶。
spring.application.name=rabbitmq-hello spring.rabbitmq.host=localhost spring.rabbitmq.port=5672 spring.rabbitmq.username=admin spring.rabbitmq.password=123456
3.創(chuàng)建消息生產(chǎn)者Sender。通過注入AmqpTemplate接口的實(shí)例來實(shí)現(xiàn)消息的發(fā)送,AmqpTemplate接口定義了一套針對AMQP協(xié)議的基礎(chǔ)操作。
在Spring Boot中會根據(jù)配置來注入其具體實(shí)現(xiàn)。在該生產(chǎn)者,我們會產(chǎn)生一個(gè)字符串,并發(fā)送到名為hello的隊(duì)列中。
@Component public class Sender { @Autowired private AmqpTemplate rabbitTemplate; public void send() { String context = "hello " + new Date(); System.out.println("Sender : " + context); this.rabbitTemplate.convertAndSend("hello", context); } }
4.創(chuàng)建消息消費(fèi)者Receiver。
通過@RabbitListener注解定義該類對hello隊(duì)列的監(jiān)聽,并用@RabbitHandler注解來指定對消息的處理方法。所以,該消費(fèi)者實(shí)現(xiàn)了對hello隊(duì)列的消費(fèi),消費(fèi)操作為輸出消息的字符串內(nèi)容。
@Component @RabbitListener(queues = "hello") public class Receiver { @RabbitHandler public void process(String hello) { System.out.println("Receiver : " + hello); } }
5.創(chuàng)建RabbitMQ的配置類RabbitConfig,用來配置隊(duì)列、交換器、路由等高級信息。這里我們以入門為主,先以最小化的配置來定義,以完成一個(gè)基本的生產(chǎn)和消費(fèi)過程。
@Configuration public class RabbitConfig { @Bean public Queue helloQueue() { return new Queue("hello"); } }
6.創(chuàng)建應(yīng)用主類:
@SpringBootApplication public class HelloApplication { public static void main(String[] args) { SpringApplication.run(HelloApplication.class, args); } }
7.創(chuàng)建單元測試類,用來調(diào)用消息生產(chǎn):
@RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = HelloApplication.class) public class HelloApplicationTests { @Autowired private Sender sender; @Test public void hello() throws Exception { sender.send(); } }
8.啟動應(yīng)用主類,從控制臺中,我們看到如下內(nèi)容,程序創(chuàng)建了一個(gè)訪問127.0.0.1:5672中admin的連接。
o.s.a.r.c.CachingConnectionFactory : Created new connection: SimpleConnection@29836d32 [delegate=amqp://admin@127.0.0.1:5672/]
同時(shí),我們通過RabbitMQ的控制面板,可以看到Connection和Channels中包含當(dāng)前連接的條目。
9.運(yùn)行單元測試類,我們可以看到控制臺中輸出下面的內(nèi)容,消息被發(fā)送到了RabbitMQ Server的hello隊(duì)列中。
Sender : hello Sun Sep 25 11:06:11 CST 2016
10.切換到應(yīng)用主類的控制臺,我們可以看到類似如下輸出,消費(fèi)者對hello隊(duì)列的監(jiān)聽程序執(zhí)行了,并輸出了接受到的消息信息。
Receiver : hello Sun Sep 25 11:06:11 CST 2016
通過上面的示例,我們在Spring Boot應(yīng)用中引入spring-boot-starter-amqp模塊,進(jìn)行簡單配置就完成了對RabbitMQ的消息生產(chǎn)和消費(fèi)的開發(fā)內(nèi)容。
需要注意的地方,Direct模式相當(dāng)于一對一模式,一個(gè)消息被發(fā)送者發(fā)送后,會被轉(zhuǎn)發(fā)到一個(gè)綁定的消息隊(duì)列中,然后被一個(gè)接收者接收!
實(shí)際上RabbitMQ還可以支持發(fā)送對象:當(dāng)然由于涉及到序列化和反序列化,該對象要實(shí)現(xiàn)Serilizable接口.HelloSender做出如下改寫:
public void send() { User user=new User(); //實(shí)現(xiàn)Serializable接口 user.setUsername("hlhdidi"); user.setPassword("123"); template.convertAndSend("queue",user); } HelloReceiver做出如下改寫: @RabbitListener(queues="queue") //監(jiān)聽器監(jiān)聽指定的Queue public void process1(User user) { //用User作為參數(shù) System.out.println("Receive1:"+user); }
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。