-
安裝
下面是有Windows和Linux不同系統(tǒng)下的詳細安裝步驟宪摧,這了不再做介紹
安裝步驟這里需要注意RabbitMQ默認服務的端口是5672,管理RabbitMQ的WEBUI默認端口為15672。
-
AMQP
即Advanced Message Queuing Protocol,一個提供統(tǒng)一消息服務的應用 層標準高級消息隊列協(xié)議,是應用層協(xié)議的一個開放標準,為面向消息的中間 件設計闽撤∑眩基于此協(xié)議的客戶端與消息中間件可傳遞消息
以上是百度百科的介紹,
AMQP主要是為解耦瞬哼,生產(chǎn)者不用知道接收者是誰,同理租副,接收者也不用知道生產(chǎn)者是誰坐慰,可靠,安全用僧。 RabbitMQ
是AMQP中的一個開源的實現(xiàn)结胀。使用Erlang語言開發(fā)赞咙,所以我安裝RabbitMQ需要配置Erlang環(huán)境,
-
為什么使用RabbitMQ
綜合選擇RabbitMQ
-
原理
消息隊列一般有三個概念:- 生產(chǎn)者
- 隊列
- 消費者
顧名思義相信大家都可以理解
而RabbitMQ在此基礎(chǔ)上添加了一層交換器抽象層糟港,
當你想要將消息投遞到隊列時攀操,你通過把消息發(fā)送給交換器來完成。然后秸抚,根據(jù)確定的規(guī)則速和,RabbitMQ將會決定消息該投遞到哪個隊列,這些規(guī)則被稱為路由鍵(routing key)剥汤。隊列通過路由鍵綁定到交換器颠放,當你把消息發(fā)送到代理服務器時,消息將擁有一個路由鍵(即使是空的)
Rabbit也會將其和綁定使用的路由鍵進行匹配吭敢,如果匹配的話碰凶,那么消息將會投遞到隊列,如果路由的消息不匹配任何綁定模式的話鹿驼,消息將進入“黑洞”
交換器有四種類型
- Direct: 先匹配痒留,在投送,
- Topic: 按照特定的規(guī)則匹配
- Headers: 按照自定義規(guī)則匹配
- Fanout: 全部隊列匹配
實操上代碼
- AMQP依賴包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
- application.properties中配置
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
- 隊列配置
@Configuration
public class RabbitConfig {
@Bean
public Queue aQueue(){
return new Queue("hello");
}
@Bean
public Queue bQueue(){
return new Queue("helloB");
}
}
多個隊列在此列中照例加就可以
- 消息生產(chǎn)者
@Component
public class HelloSender {
//Spring boot 提供的默認實現(xiàn)
@Autowired
private AmqpTemplate amqpTemplate;
public void send() {
String context = "hello" + new Date();
System.out.println("sender: " + context);
//使用默認實現(xiàn)發(fā)送消息
this.amqpTemplate.convertAndSend("hello", context);
}
}
- 接收者
@Component
@RabbitListener(queues = "hello")
public class HelloRec {
@RabbitHandler
public void process(String hello){
System.out.println("rec:" + hello);
}
}
- 測試
@RunWith(SpringRunner.class)
@SpringBootTest
public class BootRabbitmqApplicationTests {
@Autowired
private HelloSender helloSender;
@Test
public void contextLoads() {
helloSender.send();
}
}
注意: