Messagerie middleware Démarrer 2 --- --- motifs de messagerie RabbitMQ

La seconde nous présenter brièvement quelques-uns du mode de messagerie RabbitMQ:

1, un mode direct (direct)

  (1) Mode Direct Présentation

Nous devons envoyer des messages à utiliser ce mode lorsqu'un seul noeud, qui est la forme la plus simple.

Direct Exchange pour envoyer tout message sera transmis à la file d' attente RouteKey spécifié.
1. Usage général rabbitmq est Echange: « » (le nom est une chaîne vide change, ci - après dénommé Exchange par défaut).
2. L' échange ne doit pas être effectuée dans un mode quelconque de ces liaisons (liaison) opération.
Nécessite un « RouteKey » 3. messagerie, il peut être comprise simplement comme le nom de la file d' attente à envoyer.
4. Si le nom de la file d' attente n'existe pas RouteKey VHost spécifié, le message sera mis au rebut. 

  (2) créer la file d'attente 

Avant de faire l'exemple suivant, nous créons d'abord une file d'attente appelée itcast.

Durabilité: si la persistance durable fait ( de longue durée) transitoire (temporaire)
Auto Supprimer le: que ce soit pour supprimer automatiquement 

  (3) Code producteur qui implémente un message ---

       Tout d'abord, créer un rabbitmq_demo de projet, mis en place AMQP la dépendance a commencé, pom.xml comme suit:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring‐boot‐starter‐parent</artifactId>
    <version>2.0.1.RELEASE</version>
<relativePath/>
</parent>
<properties>
    <project.build.sourceEncoding>UTF‐8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF‐8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring‐boot‐starter‐amqp</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring‐boot‐starter‐test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

      En second lieu, écrire un fichier de configuration application.yml

spring:
  rabbitmq:
    host: 192.168.184.134

      En troisième lieu, la classe commencer à écrire 

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class);
    }
}

      Quatrièmement, les classes de test d'écriture

@RunWith(SpringRunner.class)
@SpringBootTest(classes=Application.class)
public class MqTest {

    @Autowired
    private RabbitTemplate rabbitTemplate;
    @Test
    public void testSend(){
        rabbitTemplate.convertAndSend("test","测试");
    }
}

  (4) code de la consommation qui met en œuvre le message --- 

      Tout d'abord, écrire un message classe de consommateurs

@Component
@RabbitListener(queues="test" )
public class Customer1 {

    @RabbitHandler
    public void showMessage(String message){
        System.out.println("itcast接收到消息:"+message);
    }
}

      En second lieu, exécutez la classe de démarrage, vous pouvez voir juste envoyé un message dans la console 

2, le mode de rupture (sortance) 

  (1) Introduction mode de ventilation

Lorsque nous avons besoin d'un message envoyé à plusieurs files d'attente, nous devons utiliser ce mode. suit la figure:

Tous les messages envoyés à Fanout d' échange seront transmises à toutes les liaisons Exchange (liaison) de
la file d' attente.
1. Le modèle peut être comprise comme une table de routage
2. Ce mode ne nécessite pas RouteKey
3. Ce mode nécessite l'avance file d' attente Exchange bind, peut se lier à une pluralité de files d' attente Exchange, la file d' attente peut être liée à une pluralité d'Exchange ensemble.
4. Si ne lie pas le message reçu et Exchange une file d' attente, le message sera mis au rebut. 

  (2) échangeur de file d'attente de reliure

      Tout d'abord, ajoutez la file d'attente et la file d'attente itheima kudingyu

      En second lieu, le nouveau chuanz de commutation (clair et examiner ensuite la section précédente)

      Troisièmement, les deux files d'attente itheima itcast et liés à l'échangeur Chuanzhi 

      Cliquez Chuanzhi dans l'interface de gestion du commutateur 

      Consolidations et cliquez sur le Ajouter une liaison itheima kudingyu 

      Après effet de liaison est la suivante:

  (2) code qui implémente un message producteur ---

@Test
public void testSendFanout(){
    rabbitTemplate.convertAndSend("chuanzhi","", "分列模式test");
}

 (3) le code de la consommation qui met en œuvre le message ---

      Tout d'abord, créer une classe d'écoute de messages pour surveiller itheima nouvelles

@Component
@RabbitListener(queues="itheima" )
public class Customer2 {

    @RabbitHandler
    public void showMessage(String message){
        System.out.println("itheima接收到消息:"+message);
    }
}

      En second lieu, créer une classe d'écoute de messages pour la surveillance de nouvelles kudingyu 

@Component
@RabbitListener(queues="kudingyu" )
public class Customer3 {

    @RabbitHandler
    public void showMessage(String message){
        System.out.println("kudingyu接收到消息:"+message);
    }
}

  (4) de test, deux messages peut être vu dans la console

3, thème (sujet) 

  (1) Thèmes Présentation

Tous les messages envoyés à la Bourse du sujet seront transmises à tous les sujets spécifiés RouteKey concerné file d'attente.

Comme indiqué ci - dessus de
telle sorte que le commutateur de messages provenant de différentes sources peut arriver à une colonne, en fait, qu'une meilleure compréhension du sens du point de correspondance floue est, par exemple: Montré dans la colonne de routekey rouge pour usa #, des représentants de # correspond à tout caractère, mais pour que le message pour atteindre cette colonne, Etats - Unis. # doit correspondre à l'arrière du bien sont libres. Figure de
la usa.weather, se trouve dans la file d' attente rouge, le symbole # correspond à un ou plusieurs mots, symboles * correspond à un mot plus, pas moins. Par conséquent, Etats - Unis. # Peut être adapté à usa.news.XXX, mais aux Etats - Unis. * Seulement correspond à usa.XXX.
Remarque:
Mettez l'analyse finale est une liste de noms et la file d' attente est lié. Lorsqu'un message est affiché au commutateur, en fait, le message est acheminé vers les clés de comparer, le routage des messages à partir du dernier canal que vous êtes connecté à la même liste de fixations sur l'interrupteur. Tous les messages envoyés à la Bourse du sujet seront transmises à tous les sujets concernés spécifiés RouteKey file d' attente

1. Ce modèle est plus complexe, en termes simples, est que chaque file d' attente a son propre thème concerné, tous les messages sont présentés avec un « titre » (RouteKey), Exchange transmettra le message à tous les sujets concernés peuvent brouiller et RouteKey la file d' attente correspondante.
2. Ce modèle nécessite RouteKey, peut - être de lier l'avancée des files d' attente Exchange.
3. Lors de la liaison, de fournir un sujet de préoccupation à la file d' attente, comme « # .log. # » Indique que la prise en charge de file d' attente de tous les messages impliqués dans le journal (un RouteKey comme message « MQ.log.error » sera transmis à la file d' attente).
4. « # » représente 0 ou plusieurs mots - clés « » indique un mot - clé. Comme peut correspondre à « log.warn », ne peut pas correspondre à la « log.warn.timeout » « Log. »; «Log # » mais peut être adaptée à la fois.
5. De même, si Exchange ne se trouve pas possible de faire correspondre la file d' attente RouteKey, ce message sera mis au rebut.

  (2) créer la file d'attente avec les fixations

      Tout d'abord, un nouveau commutateur, sélectionnez le type de sujet

      En second lieu, cliquez sur le nouveau commutateur topictest 

      Ajouter les règles de correspondance, ajouter la liste est la suivante: 

  (2) la mise en œuvre du code 

      Tout d' abord, la préparation des méthodes de classe de test:

@Test
public void testSendTopic1(){
    rabbitTemplate.convertAndSend("topictest","goods.aaa","主题模式");
}

      En second lieu, sortie: itcast message reçu: thèmes 

@Test
public void testSendTopic2(){
    rabbitTemplate.convertAndSend("topictest","article.content.log","主题模式");
}

      En troisième lieu, sortie: itheima message reçu: thèmes

@Test
public void testSendTopic3(){
    rabbitTemplate.convertAndSend("topictest","goods.log","主题模式");
}

     En quatrième lieu, la sortie:

itheima接收到消息:主题模式
itcast接收到消息:主题模式
kudingyu接收到消息:主题模式

À ce stade, le modèle de messagerie RabbitMQ trois introduction complète, Mesdames et chaussures opération mains vers le bas pour les enfants.


 

 

 

 

 


 

 

Publié 41 articles originaux · louange gagné 47 · vues 30000 +

Je suppose que tu aimes

Origine blog.csdn.net/u014526891/article/details/87539206
conseillé
Classement