流世幻羽

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

前提:使用Devtools容器化技术的

--查看
docker images
-- 启动
systemctl start docker

-- rabbitmq
docker run -di --name=tensquare_rabbitmq -p 5671:5617 -p 5672:5672 -p 4369:4369 -p 15671:15671 -p 15672:15672 -p 25672:25672 rabbitmq:management

-- 查看容器
docker ps -n 5
--关闭
docker stop 
--启动
docker start

查看链接

http://192.168.231.129:15672/#/

依赖

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
</dependencies>
server:
  port: 8003
spring:
  rabbitmq:
    host: 192.168.231.129

 

Durability:是否做持久化 Durable(持久) transient(临时)
Auto delete : 是否自动删除

什么是Direct模式

任何发送到Direct Exchange的消息都会被转发到RouteKey中指定的Queue。
1.一般情况可以使用rabbitMQ自带的Exchange:”"(该Exchange的名字为空字符串,下
文称其为default Exchange)。
2.这种模式下不需要将Exchange进行任何绑定(binding)操作
3.消息传递时需要一个“RouteKey”,可以简单的理解为要发送到的队列名字。
4.如果vhost中不存在RouteKey中指定的队列名,则该消息会被抛弃。

什么是分列(Fanout)模式

任何发送到Fanout Exchange的消息都会被转发到与该Exchange绑定(Binding)的所有
Queue上。
1.可以理解为路由表的模式
2.这种模式不需要RouteKey
3.这种模式需要提前将Exchange与Queue进行绑定,一个Exchange可以绑定多个
Queue,一个Queue可以同多个Exchange进行绑定。
4.如果接受到消息的Exchange没有与任何Queue绑定,则消息会被抛弃。

什么是主题模式

 

此类交换器使得来自不同的源头的消息可以到达一个对列,其实说的更明白一点就是模
糊匹配的意思,例如:上图中红色对列的routekey为usa.#,#代表匹配任意字符,但是
要想消息能到达此对列,usa.必须匹配后面的#好可以随意。图中usa.news
usa.weather,都能找到红色队列,符号 # 匹配一个或多个词,符号 * 匹配不多不少一个
词。因此 usa.# 能够匹配到 usa.news.XXX ,但是 usa.* 只会匹配到 usa.XXX 。
注:
交换器说到底是一个名称与队列绑定的列表。当消息发布到交换器时,实际上是由你所
连接的信道,将消息路由键同交换器上绑定的列表进行比较,最后路由消息。
任何发送到Topic Exchange的消息都会被转发到所有关心RouteKey中指定话题的
Queue上
1.这种模式较为复杂,简单来说,就是每个队列都有其关心的主题,所有的消息都带有一
个“标题”(RouteKey),Exchange会将消息转发到所有关注主题能与RouteKey模糊匹配的
队列。
2.这种模式需要RouteKey,也许要提前绑定Exchange与Queue。
3.在进行绑定时,要提供一个该队列关心的主题,如“#.log.#”表示该队列关心所有涉及
log的消息(一个RouteKey为”MQ.log.error”的消息会被转发到该队列)。
4.“#”表示0个或若干个关键字,“”表示一个关键字。如“log.”能与“log.warn”匹配,无法
与“log.warn.timeout”匹配;但是“log.#”能与上述两者匹配。
5.同样,如果Exchange没有发现能够与RouteKey匹配的Queue,则会抛弃此消息

@RunWith(SpringRunner.class)
@SpringBootTest(classes = RabbitApplication.class)
public class ProductTest {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    @Test
    public void  sendMsg1(){
        rabbitTemplate.convertAndSend("zhijie", "直接模式测试");
    }

    /**
     * 分裂模式
     */
    @Test
    public void  sendMsg2(){
        rabbitTemplate.convertAndSend("dufu","","分裂模式测试");
    }


    /**
     * 主题模式
     */
    @Test
    public void  sendMsg3(){
        rabbitTemplate.convertAndSend("libai","libai1","主题模式测试");
    }
}

 

测试

 1 //直接
 2 @Component
 3 @RabbitListener(queues = "zhijie")
 4 public class Customer1 {
 5     @RabbitHandler
 6     public void getMsg(String msg){
 7         System.out.println("itcast"+msg);
 8     }
 9 }
10 
11 //分裂
12 @Component
13 @RabbitListener(queues = "dufu")
14 public class Customer2 {
15     @RabbitHandler
16     public void getMsg(String msg){
17         System.out.println("itheima"+msg);
18     }
19 }
20 
21 //主题
22 @Component
23 @RabbitListener(queues = "laibai")
24 public class Customer3 {
25     @RabbitHandler
26     public void getMsg(String msg){
27         System.out.println("kudingyu"+msg);
28     }
29 }

 

posted on 2019-08-16 10:35  流世幻羽  阅读(302)  评论(0编辑  收藏  举报