RocketMq:MQClientException The producer service state not OK,RUNNING

org.apache.rocketmq.client.exception.MQClientException: The producer service state not OK, maybe started once, RUNNING
See http://rocketmq.apache.org/docs/faq/ for further details.

	at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.start(DefaultMQProducerImpl.java:185)
	at org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl.start(DefaultMQProducerImpl.java:146)
	at org.apache.rocketmq.client.producer.DefaultMQProducer.start(DefaultMQProducer.java:172)
	at com.zengjx.mq.SpringMQTest.testSendMsg(SpringMQTest.java:37)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)

 参考:

https://blog.csdn.net/magicianofcodes/article/details/100540135

 问题原因:

用注解的形式不用自己去启动 producer 服务,所以吧
producer.start() 的代码删除就好

package com.zengjx.mq;

import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.remoting.common.RemotingHelper;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.junit4.SpringRunner;

import java.io.IOException;

/**
 * @ClassName HelloController
 * @Description TODO
 * @Author zengjx
 * @Company zengjx
 * @Date 2019/12/9  20:24
 * @Version V1.0
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath*:applicationContext-producer.xml")
public class SpringMQTest {
   @Autowired
   private DefaultMQProducer  defaultMQProducer ;

   @Test
   public   void   testSendMsg()  throws Exception{
       //1.创建生产者
      // DefaultMQProducer   defaultMQProducer  =new DefaultMQProducer("productGroup");
       //2.设置NameServerd 地址
       defaultMQProducer.setNamesrvAddr("127.0.0.1:9876");//出错位置
       // 3.启动生产者producer.start()
       defaultMQProducer.start();//注释掉  出错位置
       //4.创建消息message
       //Message(String topic, String tags, String keys, int flag, byte[] body, boolean waitStoreMsgOK)
       Message message=new Message("topic-spring",
               "tag-spring",
               "key-spring",
               "这是我第一次发送RocketMQ".getBytes(RemotingHelper.DEFAULT_CHARSET));
       SendResult sendResult = defaultMQProducer.send(message);
       System.out.println("sendRsult:"+sendResult);
      // defaultMQProducer.shutdown();
       //5.发送消息 接收结果sendResult
       //6.输出sendResult 查看是否成功
       //7.如果不再发送消息关闭生产者



   }

配置 :

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--创建 一个 DefaultMQProducter
   init  对象创建后
   destroy 对象销毁之后

  -->
<bean id="defaultMQProducter" class="org.apache.rocketmq.client.producer.DefaultMQProducer"
init-method="start" destroy-method="shutdown"
>
<!--    设置组名 -->
    <property name="producerGroup" value="spring-producerGroup">

    </property>
<!--设置NameServer地址-->
 <property name="namesrvAddr" value="127.0.0.1:9876">

 </property>

</bean>
 </beans>
package com.zengjx.mq;

import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.remoting.common.RemotingHelper;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

/**
 * @ClassName HelloController
 * @Description TODO
 * @Author zengjx
 * @Company zengjx
 * @Date 2019/12/9  21:49
 * @Version V1.0
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath*:applicationContext-producer.xml")
public class SpringMQTest2 {
    @Autowired
    private DefaultMQProducer producer;

    @Test
    public void testSendMsg() throws Exception{
        //4.创建消息-message = new Message(主题名,标签名,消息key名,消息内容.getBytes(RemotingHelper.DEFAULT_CHARSET));
        Message message = new Message(
                "topic-spring",
                "tag-1",
                "key-1",
                "这是我第1次发送Spring-MQ消息".getBytes(RemotingHelper.DEFAULT_CHARSET)
        );
        //5.发送消息,接收结果-sendResult = producer.send(message)
        SendResult sendResult = producer.send(message);
        //6.输出sendResult查看消息是否成功送达
        System.out.println(sendResult);
    }
}
发布了221 篇原创文章 · 获赞 8 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/oDianZi1234567/article/details/103466089
今日推荐