0.项目目录截图

=====================================================================

springboot的版本:

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.0.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->

==========================================================================================================================================

引入jar包:

<!-- springboot整合rabbitMQ -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

========================================================================================================================

使用junit5做测试.

========================================================================================================================

1.application.yml配置文件

#SpringBoot整合RabbitMQ
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
#connection-timeout: 15000

2.RabbitMqConfig.java

package com.nantian.rabbitmqtopic;

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
* Created by Administrator on 2018/4/10.
* 1. yaml
* 2. RabbitMqConfig
* a 创建queue
* b. 创建交换机TopicExchange
* c. 根据绑定规则将队列绑定到相应的交换机上
* 3. sender
* 4. test
* 5. receiver
*/

@Configuration
public class RabbitMqConfig {

// a 创建queue
@Bean(name = "message") // 指定该参数名是message 见下面Qualifier("message")
public Queue queueMessage(){
return new Queue("topic.message"); // topic.message 是rounting-key,匹配规则
}

@Bean(name = "messages")
public Queue queueMessages(){
return new Queue("topic.messages");
}

// b. 创建交换机TopicExchange
@Bean
public TopicExchange exchange(){
return new TopicExchange("topicExchange");
}

/*
c. 根据绑定规则将队列绑定到相应的交换机上(bindingKey)--Exchange Queues

*/
@Bean
public Binding bindingExchangeMessage(@Qualifier("message") Queue queueMessage,TopicExchange exchange){
return BindingBuilder.bind(queueMessage).to(exchange).with("topic.message");
}

@Bean
/**
* 将队列"messages" 绑定到交换机上,绑定规则是 topic.messages
*
*/
public Binding bindingExchangeMessages(@Qualifier("messages")Queue queueMessages,TopicExchange exchange){
return BindingBuilder.bind(queueMessages).to(exchange).with("topic.#");
}

}

3.发送者:TopicSender.java

package com.nantian.rabbitmqtopic;

import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
* Created by Administrator on 2018/4/10.
*/

@Component
public class TopicSender {

@Autowired
private AmqpTemplate amqpTemplate;
/**
* 交换机 rountingkey 发送的内容 发送消息到相应的Exchange
* 向名称为 topicExchange 的交换机 发送满足routingkey规则为 "topic.messages " 的内容为 "我是发送消息的内容"  的消息
*/
public void sendMessage(){
this.amqpTemplate.convertAndSend("topicExchange","topic.messages","我是发送消息的内容! ");
}

/**
* 消息一
*/
public void send1() {
String context = "hi, i am message 1";
System.out.println("Sender : " + context);
this.amqpTemplate.convertAndSend("topicExchange", "topic.message", context);
}

/**
* 消息2
*/
public void send2() {
String context = "hi, i am messages 2";
System.out.println("Sender : " + context);
this.amqpTemplate.convertAndSend("topicExchange", "topic.messages", context);
}

}
4.接受者:TopicReceiver.java

package com.nantian.rabbitmqtopic;

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
* Created by Administrator on 2018/4/10.
*/
@Component
public class TopicReceiver {

@RabbitListener(queues ="topic.message" )
public void receiveMessage1(String str){
System.out.println("赵云1:我是监听topic.message的,仅满足topic.message的过来 , "+str);
}

@RabbitListener(queues ="topic.messages" )
public void receiveMessage2(String str){
System.out.println("关羽2:我是监听topic.# 的,满足 topic.# 的都过来 , "+str);
}

}
5.测试类:TestTopicRabbitMq.java

package com.nantian;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import com.nantian.rabbitmqtopic.TopicSender;

@RunWith(SpringRunner.class)
@SpringBootTest
public class TestTopicRabbit {

@Autowired
private TopicSender topicSender;

@Test
public void contextLoads() {
topicSender.sendMessage();
}

/**
* 测试消息一
*/
@Test
public void send1() {
topicSender.send1();
}

/**
* 测试消息二
*/
@Test
public void send2() {
topicSender.send2();
}
}

springboot使用rabbitmq-Topic模式,亲自实测能用!!!的更多相关文章

  1. 干货!基于SpringBoot的RabbitMQ多种模式队列实战

    目录 环境准备 安装RabbitMQ 依赖 连接配置 五种队列模式实现 1 点对点的队列 2 工作队列模式Work Queue 3 路由模式Routing 4 发布/订阅模式Publish/Subsc ...

  2. SpringBoot之RabbitMQ的使用

    一 .RabbitMQ的介绍 RabbitMQ是消息中间件的一种,消息中间件即分布式系统中完成消息的发送和接收的基础软件,消息中间件的工作过程可以用生产者消费者模型来表示.即,生产者不断的向消息队列发 ...

  3. springboot学习笔记-6 springboot整合RabbitMQ

    一 RabbitMQ的介绍 RabbitMQ是消息中间件的一种,消息中间件即分布式系统中完成消息的发送和接收的基础软件.这些软件有很多,包括ActiveMQ(apache公司的),RocketMQ(阿 ...

  4. SpringBoot整合RabbitMQ实现六种工作模式

    RabbitMQ主要有六种种工作模式,本文整合SpringBoot分别介绍工作模式的实现. 前提概念 生产者 消息生产者或者发送者,使用P表示: 队列 消息从生产端发送到消费端,一定要通过队列转发,使 ...

  5. RabbitMQ入门-Topic模式

    上篇<RabbitMQ入门-Routing直连模式>我们介绍了可以定向发送消息,并可以根据自定义规则派发消息.看起来,这个Routing模式已经算灵活的了,但是,这还不够,我们还有更加多样 ...

  6. spring boot整合RabbitMQ(Topic模式)

    1.Topic交换器介绍 Topic Exchange 转发消息主要是根据通配符. 在这种交换机下,队列和交换机的绑定会定义一种路由模式,那么,通配符就要在这种路由模式和路由键之间匹配后交换机才能转发 ...

  7. demo rabbitmq topic(主题模式),fanout(广播模式),轮询分发,确认接收Ack处理

    //durable = true 代表持久化 交换机和队列都要为true ,持久代表服务重启,没有处理的消息依然存在 //topic 根据不同的routkey 发送和接收信息 //fanout 广播模 ...

  8. RabbitMQ广播:topic模式

    topic模式跟direct差不多,只是把type改一下就行. direct是把固定的routing_key跟queue绑定,topic是把模糊的routing_key跟queue绑定 原理图: 发布 ...

  9. SpringBoot集成RabbitMQ

    官方说明:http://www.rabbitmq.com/getstarted.html 什么是MQ? MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.MQ ...

随机推荐

  1. AX 2009中现有量画面修改

    前端时间开发一个东西,需要在现有量画面增加一个字段 但是发现这个display方法写在任何数据源下面都不行,数据取的不对. 因为InventSum这个表只有所有维度都出来时才会有对应关联的invent ...

  2. Mybatis配置、逆向工程自动生成代码(CRUD案例)

    目的: mybatis简介 搭建mybatis环境 基于SSM逆向工程的使用 Mybatis增删改查案例 mybatis简介 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及 ...

  3. Spring Boot集成Spring Data Jpa完整实例

    步骤: 添加依赖: 配置文件: 出了数据库的配置,还要配置jpa相关的: 实体类: Dao接口: 定义一个查询的方法,如果是jpa默认就有也可以不写: 测试: 如果报下面的错误,说明jdk9中缺少相关 ...

  4. 安装Nginx报错“Cannot retrieve metalink for repository: epel. Please verify its path and try again”

    CentOS 6.5中通过yum安装nginx报错. 搜了一下,很多都是修改某个配置文件的.但是在StackOverFlow的某个问题下,有人回答说修改配置文件并不是一个好的方法,虽然我采用了这个人的 ...

  5. Redis—.Net中的使用

    StackExchange.Redis使用以及封装 来源:http://www.cnblogs.com/qtqq/p/5951201.html,https://www.cnblogs.com/xsj1 ...

  6. LeetCode每日一练(1-3)

    题目导航 1. 两数之和 2. 两数相加 3. 无重复字符的最长子串 1. 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的 ...

  7. Java Web 深入分析(10) Spring 实践

    Spring helloworld [http://wiki.jikexueyuan.com/project/spring/hello-world-example.html] HelloWorld.j ...

  8. 论文阅读之FaceNet: A Unified Embedding for Face Recognition and Clustering

    名称:FaceNet: A Unified Embedding for Face Recognition and Clustering 时间:2015.04.13 来源:CVPR 2015       ...

  9. npm查看包版本

    点击跳转 ~ 会匹配最近的小版本依赖包,比如~1.2.3会匹配所有1.2.x版本,但是不包括1.3.0 ^ 会匹配最新的大版本依赖包,比如^1.2.3会匹配所有1.x.x的包,包括1.3.0,但是不包 ...

  10. (详细)Eclips+jsp+servlet+mysql+登录实例+源代码

    欢迎任何形式的转载,但请务必注明出处. 该教程较全,从软件的安装以及相关的环境配置我都放置了相关教程的链接,读者可直接点击进入.自己写电商网站作业时查找了很多资料,但都不是很全,所以趁着寒假写了这份教 ...