Springboot integra combate real RocketMQ para enviar mensagens

Envie mensagens em ação

Nota: Lembre-se de iniciar o nameser e corretor

  • Crie rapidamente um projeto springboot  https://start.spring.io/

  • Adicione dependências relacionadas. Lembre-se de que a versão aqui deve ser consistente com a versão do servidor, caso contrário, o tópico não será criado automaticamente após a inicialização! Lembrar!

    <dependency>
    		<groupId>org.apache.rocketmq</groupId>
    		<artifactId>rocketmq-client</artifactId>
    		<version>4.3.0</version>
    </dependency>
    
  • Objeto de mensagem

    • tópico: nome do tópico
    • tag: tag, usado para filtrar
    • chave: o identificador único da mensagem, que pode ser uma combinação de campos de negócios
    • corpo: corpo da mensagem, matriz de bytes
  • Observe que ao enviar uma mensagem para o corretor, você precisa determinar se há um tópico para iniciar o corretor,

    Recomenda-se ativar a criação automática de tópicos no ambiente local e desativar a criação automática de tópicos no ambiente de produção.

    Recomenda-se criar primeiro um tópico manualmente, se for criado automaticamente pelo programa e depois a mensagem for entregue, haverá um atraso

  • Modelo conceitual: um tópico corresponde a várias filas, que podem ser especificadas ao criar um tópico, como um tópico de pedido

  • Visualize mensagens através do plano de fundo de gerenciamento visual

Aqui escrevemos o provedor de mensagens!

@Component
public class PayProducer {

    private String producerGroup = "pay_group";

    private String nameServerAddr = "39.96.192.171:9876"; //多节点逗号分隔

    private DefaultMQProducer producer;

    public PayProducer(){
       producer =  new DefaultMQProducer(producerGroup);

       producer.setNamesrvAddr(nameServerAddr);
       start();
    }

    public DefaultMQProducer getProducer(){
        return this.producer;
    }

    /**
     * 对象在用之前必须要调用一次,只能初始化一次
     */
    public void start(){
    try {
        this.producer.start();
    } catch (MQClientException e) {
        e.printStackTrace();
    }
}

    /**
     * 一般在应用上下文,使用上下文监听器,进行关闭
     */
    public void shutdown(){
        this.producer.shutdown();
}

}
@RestController
public class PayController {

    @Autowired
    private PayProducer payProducer;

    private static final String topic = "pay_topic";

    @RequestMapping("/api/v1/pay_cb")
    public Object callback(String text) throws InterruptedException, RemotingException, MQClientException, MQBrokerException {

        Message message = new Message(topic, "taga", ("hello rocketmq!" + text).getBytes());

        SendResult sendResult = payProducer.getProducer().send(message);

        System.out.println(sendResult);
        return null;
    }
}

Inicie o serviço e acesse o caminho. O seguinte erro 500 deve ser relatado. Observe o console:

Motivo: o corretor proíbe a criação automática do tópico e o usuário não cria manualmente o tópico, ou o corretor e a rede do servidor de nomes não podem se comunicar.

de

sh bin / mqbroker -m Ver configuração autoCreateTopicEnable = true, então o tópico será criado automaticamente

Centos7 fecha o sistema de firewallctl stop firewalld

Em seguida, revisitamos e ele relatará um erro de tempo limite

Motivo: o Alibaba Cloud tem várias placas de rede. Rocketmq selecionará um IP com base na placa de rede atual. Quando sua máquina tiver várias placas de rede, pode haver problemas. Por exemplo, o problema que encontrei é que há dois IPs em minha máquina, um IP público e um privado, então preciso configurar o broker.conf para especificar o IP público atual e reiniciar o broker. Nova configuração: conf / broker .conf (Nome da propriedade brokerIP1 = O endereço IP da rede pública onde o broker está localizado) Adicione esta configuração: brokerIP1 = 120.76.62.13 Comando inicial: nohup sh bin / mqbroker -n localhost: 9876 -c ./conf/broker.conf &

O console não pode visualizar os dados e avisa que o motivo do erro de conexão 10909: Rocket habilitou o canal VIP por padrão e a porta do canal VIP é 10911-2 = 10909

Solução: o Alibaba Cloud Security Group precisa adicionar uma porta 10909

Visite novamente! O console da ideia envia uma mensagem com sucesso!

Nós verificamos o console rocketmq

Você pode ver a mensagem que enviamos! Em seguida, criamos consumidores para consumir mensagens!

 

 

Acho que você gosta

Origin blog.csdn.net/qq_41023026/article/details/89741534
Recomendado
Clasificación