Springboot integra el combate real de RocketMQ para enviar mensajes

Envía mensajes en acción

Nota: recuerde iniciar el nombre y el corredor

  • Cree rápidamente un proyecto springboot  https://start.spring.io/

  • Agregue dependencias relacionadas. Recuerde que la versión aquí debe ser consistente con la versión del servidor, de lo contrario, el tema no se creará automáticamente después del inicio. ¡Recuerda!

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

    • tema: nombre del tema
    • etiqueta: etiqueta, usada para filtrar
    • clave: el identificador único del mensaje, que puede ser una combinación de campos comerciales
    • cuerpo: cuerpo del mensaje, matriz de bytes
  • Tenga en cuenta que al enviar un mensaje al corredor, debe determinar si hay un tema para iniciar el corredor,

    Se recomienda activar la creación automática de temas en el entorno local y desactivar la creación automática de temas en el entorno de producción.

    Se recomienda crear un tema manualmente primero, si el programa lo crea automáticamente y luego se entrega el mensaje, habrá un retraso

  • Modelo conceptual: un tema corresponde a varias colas, que se pueden especificar al crear un tema, como ordenar tema

  • Ver mensajes a través del fondo de gestión visual

¡Aquí escribimos el proveedor de mensajes!

@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 el servicio y acceda a la ruta. Se debe informar del siguiente error 500. Mire la consola:

Motivo: el intermediario prohíbe la creación automática de un tema y el usuario no crea manualmente el tema, o el intermediario y la red del servidor de nombres no pueden comunicarse. Solución:

por

sh bin / mqbroker -m Ver configuración autoCreateTopicEnable = true, luego el tema se creará automáticamente

Centos7 cerrar el sistema de firewall cctl detener firewalld

Luego volvemos a visitar y se informará un error de tiempo de espera

Motivo: Alibaba Cloud tiene varias tarjetas de red. Rocketmq seleccionará una IP basada en la tarjeta de red actual. Cuando su máquina tiene varias tarjetas de red, puede haber problemas. Por ejemplo, el problema que encontré es que hay dos IP en mi máquina, una IP pública y una IP privada, por lo que necesito configurar broker.conf para especificar la IP pública actual y luego reiniciar el broker. Nueva configuración: conf / broker .conf (Nombre de propiedad brokerIP1 = La dirección IP de la red pública donde se encuentra el corredor) Agregue esta configuración: brokerIP1 = 120.76.62.13 Comando de inicio: nohup sh bin / mqbroker -n localhost: 9876 -c ./conf/broker.conf &

La consola no puede ver los datos y le indica que el motivo del error de conexión 10909: Rocket ha habilitado el canal VIP de forma predeterminada y el puerto del canal VIP es 10911-2 = 10909

Solución: Alibaba Cloud Security Group necesita agregar un puerto 10909

¡Visitar de nuevo! ¡La consola de ideas envía un mensaje correctamente!

Comprobamos la consola rocketmq

¡Puedes ver el mensaje que enviamos! ¡A continuación, creamos consumidores para consumir mensajes!

 

 

Supongo que te gusta

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