概述:安裝看我上篇文章Docker安裝rabbitmq-CSDN博客
任務(wù)一
創(chuàng)建一個(gè)隊(duì)列
這樣創(chuàng)建兩個(gè)隊(duì)列
在amq.fanout交換機(jī)里面發(fā)送數(shù)據(jù)
模擬發(fā)送數(shù)據(jù)
發(fā)送消息,發(fā)現(xiàn)一下信息:
所以得出理論,消息發(fā)送是先到交換機(jī),然后由交換機(jī)路由到消息隊(duì)列
交換機(jī)是負(fù)責(zé)路由和轉(zhuǎn)發(fā)消息的,并沒有存儲(chǔ)的功能。
綁定隊(duì)列
同理綁定queue2
這時(shí),再在交換機(jī)中發(fā)消息
查看結(jié)果:
數(shù)據(jù)隔離
在rabbitmq中有虛擬主機(jī)的概念。
第一步:新添用戶
添加成功后,發(fā)現(xiàn)沒有虛擬主機(jī),也就是說,我用這個(gè)用戶登錄后,是不可以操作上面的數(shù)據(jù)的。
又因?yàn)?,我是超級管理員,所以我能看到這些
所以只能看,不能操作。
第二步:創(chuàng)立自己的虛擬主機(jī)
第三步:選自己的虛擬主機(jī)
選好后就只能看自己的了。
用Java代碼操作
官網(wǎng):RabbitMQ Tutorials — RabbitMQ
可以看到,官網(wǎng)上有案例,我們大多情況下用的是SpringAmqp,所以也就不講那么多java簡單調(diào)用的事情了。
用Spring AMQP操作
第一步:在控制臺(tái)里面創(chuàng)建一個(gè)simple.queue隊(duì)列
第二步:編寫代碼
pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.cyl</groupId>
<artifactId>test09</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>test09</name>
<description>test09</description>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.6.13</spring-boot.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.13.0</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<mainClass>org.cyl.test09.Test09Application</mainClass>
<skip>true</skip>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
配置mq服務(wù)端消息
spring:
rabbitmq:
host: 192.168.56.10
port: 5672
virtual-host: /cmall
username: cmall
password: 123456
發(fā)送方:
package org.cyl.test09.demos;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class SendMessageService {
@Autowired
private RabbitTemplate rabbitTemplate;
public void testSimpleQueue(){
String queueName="simple.queue";
String message="hello,spring amqp!";
rabbitTemplate.convertAndSend(queueName,message);
}
public void sendMessage(String exchange, String routingKey, Object message) {
rabbitTemplate.convertAndSend(exchange, routingKey, message);
}
}
接收方:
package org.cyl.test09.demos;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Service;
@Service
public class ReceiveMessageService {
@RabbitListener(queues = "simple.queue")
public void receiveMessage(String message) {
System.out.println("接收到的消息: " + message);
}
}
controller類:
package org.cyl.test09.demos.controller;
import org.cyl.test09.demos.ReceiveMessageService;
import org.cyl.test09.demos.SendMessageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@Autowired
SendMessageService sendMsgservice;
@Autowired
ReceiveMessageService receiveMsgService;
@GetMapping("/send")
public String send(){
sendMsgservice.testSimpleQueue();
return "ok";
}
}
展示結(jié)果:
Work模型
第一步:創(chuàng)建一個(gè)隊(duì)列
第二步:編寫代碼
發(fā)送:
package org.cyl.test09.demos;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class SendMessageService {
@Autowired
private RabbitTemplate rabbitTemplate;
public void testSimpleQueue() throws InterruptedException {
String queueName="work.queue";
for (int i=1;i<50;i++){
String message="hello,spring amqp!_"+i;
rabbitTemplate.convertAndSend(queueName,message);
Thread.sleep(20);
}
}
public void sendMessage(String exchange, String routingKey, Object message) {
rabbitTemplate.convertAndSend(exchange, routingKey, message);
}
}
接收:
package org.cyl.test09.demos;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Service;
@Service
public class ReceiveMessageService {
@RabbitListener(queues = "work.queue")
public void receiveMessage1(String message) {
System.out.println("消費(fèi)者1接收到的消息: " + message);
}
@RabbitListener(queues = "work.queue")
public void receiveMessage2(String message) {
System.out.println("消費(fèi)者2接收到的消息: " + message);
}
}
結(jié)果展示:
消費(fèi)者一和消費(fèi)者二是輪詢效果。
Fanout交換機(jī)
第一步:創(chuàng)建隊(duì)列
第二步:創(chuàng)建交換機(jī)并綁定
第三步:編寫代碼
發(fā)送端:
public void testFanout() {
String exchangeName="cmall.fanout";
String message="hello,spring everyone";
rabbitTemplate.convertAndSend(exchangeName,null,message);
}
接收端:
@RabbitListener(queues = "fanout.queue1")
public void receiveMessage3(String message) {
System.out.println("消費(fèi)者1接收到的消息: " + message);
}
@RabbitListener(queues = "fanout.queue2")
public void receiveMessage4(String message) {
System.out.println("消費(fèi)者2接收到的消息: " + message);
}
展示結(jié)果:
私發(fā)給不同的人:Direct交換機(jī)
第一步:創(chuàng)建兩個(gè)隊(duì)列
第二步:聲明交換機(jī)并綁定
第三步:編寫代碼
接收方:
@RabbitListener(queues = "direct.queue1")
public void receiveMessage5(String message) {
System.out.println("消費(fèi)者1接收到的消息: " + message);
}
@RabbitListener(queues = "direct.queue2")
public void receiveMessage6(String message) {
System.out.println("消費(fèi)者2接收到的消息: " + message);
}
發(fā)送方:
public void testDirect1() {
String exchangeName="cmall.fanout";
String message="hello,spring everyone";
rabbitTemplate.convertAndSend(exchangeName,"red",message);
}
public void testDirect2() {
String exchangeName="cmall.fanout";
String message="hello,spring blue";
rabbitTemplate.convertAndSend(exchangeName,"blue",message);
}
public void testDirect3() {
String exchangeName="cmall.fanout";
String message="hello,spring yellow";
rabbitTemplate.convertAndSend(exchangeName,"yellow",message);
}
Topic交換機(jī)
這個(gè)示例代碼就懶得寫了。
聲明交換機(jī)和隊(duì)列1
綁定隊(duì)列到哪個(gè)交換機(jī)里面。
一般建立關(guān)系都是在消費(fèi)者這邊的。
聲明交換機(jī)和隊(duì)列2
基于注解式聲明隊(duì)列和交換機(jī)。
消息轉(zhuǎn)換器
字節(jié)碼可變,會(huì)有安全問題。
搞完以上東西,代碼不用變,在發(fā)一次,即可為json。文章來源:http://www.zghlxwxcb.cn/news/detail-801081.html
好了,基礎(chǔ)講完。文章來源地址http://www.zghlxwxcb.cn/news/detail-801081.html
到了這里,關(guān)于rabbitmq基礎(chǔ)教程(ui,java,springamqp)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!