Spring 4.0.5 WebSock集成apollo,例外;Message broker未处于活动状态”;

Spring 4.0.5 WebSock集成apollo,例外;Message broker未处于活动状态”;,spring,websocket,this,broker,Spring,Websocket,This,Broker,对于一个项目,我想将项目从简单代理切换到全功能代理(如rabiitmq、apollo) 异常堆栈: Caused by: org.springframework.messaging.MessageDeliveryException: Message broker is not active. at org.springframework.messaging.simp.stomp.StompBrokerRelayMessageHandler.handleMessageInternal(St

对于一个项目,我想将项目从简单代理切换到全功能代理(如rabiitmq、apollo)

异常堆栈:

Caused by: org.springframework.messaging.MessageDeliveryException: Message broker is not active.
    at org.springframework.messaging.simp.stomp.StompBrokerRelayMessageHandler.handleMessageInternal(StompBrokerRelayMessageHandler.java:392)
    at org.springframework.messaging.simp.broker.AbstractBrokerMessageHandler.handleMessage(AbstractBrokerMessageHandler.java:177)
    at org.springframework.messaging.support.ExecutorSubscribableChannel.sendInternal(ExecutorSubscribableChannel.java:64)
    at org.springframework.messaging.support.AbstractMessageChannel.send(AbstractMessageChannel.java:116)
    at org.springframework.messaging.support.AbstractMessageChannel.send(AbstractMessageChannel.java:98)
    at org.springframework.messaging.simp.SimpMessagingTemplate.doSend(SimpMessagingTemplate.java:125)
    at org.springframework.messaging.simp.SimpMessagingTemplate.doSend(SimpMessagingTemplate.java:48)
    at org.springframework.messaging.core.AbstractMessageSendingTemplate.send(AbstractMessageSendingTemplate.java:94)
    at org.springframework.messaging.core.AbstractMessageSendingTemplate.convertAndSend(AbstractMessageSendingTemplate.java:144)
    at org.springframework.messaging.core.AbstractMessageSendingTemplate.convertAndSend(AbstractMessageSendingTemplate.java:112)
    at org.springframework.messaging.core.AbstractMessageSendingTemplate.convertAndSend(AbstractMessageSendingTemplate.java:107)
    at cn.clickmed.cmcp.websocket.plain.util.WebSocketUtil.sendMessage(WebSocketUtil.java:61)
    at cn.clickmed.cmcp.websocket.plain.util.WebSocketUtil.sendMessage(WebSocketUtil.java:65)
    at cn.clickmed.cmcp.websocket.plain.entity.WebSocketEntity.postPersist(WebSocketEntity.java:26)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
以下是配置代码:

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer{

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        for(String mapping : WebSocketConstant.WEBSOCKETTYPE.keySet()) {
            registry.addEndpoint(mapping).withSockJS();
        }
    }

    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        registry.setApplicationDestinationPrefixes("/websocket");
//      registry.enableSimpleBroker("/topic");
        registry.enableStompBrokerRelay("/topic","/queue").setRelayHost("localhost").setRelayPort(61613).setSystemHeartbeatReceiveInterval(2000).setSystemHeartbeatSendInterval(2000);
//      registry.setUserDestinationPrefix("/topic/");

    }


    @Bean
    public Broker broker() throws Exception {
        final Broker broker = new Broker();

        // Configure STOMP over WebSockects connector
        final AcceptingConnectorDTO ws = new AcceptingConnectorDTO();
        ws.id = "ws";
        ws.bind = "ws://localhost:61613";       
        ws.protocols.add( new StompDTO() );

        // Create a topic with name 'test'
        final TopicDTO topic = new TopicDTO();
        topic.id = "todoListener";

        // Create virtual host (based on localhost)
        final VirtualHostDTO host = new VirtualHostDTO();
        host.id = "localhost";      
        host.topics.add( topic );
        host.host_names.add( "localhost" );
        host.host_names.add( "127.0.0.1" );
        host.auto_create_destinations = false;

        // Create a web admin UI (REST) accessible at: http://localhost:61680/api/index.html#!/ 
        final WebAdminDTO webadmin = new WebAdminDTO();
        webadmin.bind = "http://localhost:61680";

        // Create JMX instrumentation 
        final JmxDTO jmxService = new JmxDTO();
        jmxService.enabled = true;

        // Finally, glue all together inside broker configuration
        final BrokerDTO config = new BrokerDTO();
        config.connectors.add( ws );
        config.virtual_hosts.add( host );
        config.web_admins.add( webadmin );
        config.services.add( jmxService );

        broker.setConfig( config );
        broker.setTmp( new File( System.getProperty( "java.io.tmpdir" ) ) );

        broker.start( new Runnable() {          
            @Override
            public void run() {     
                System.out.println("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:启动了");
            }
        } );

        return broker;
    }

}
发送消息代码:

public class WebSocketUtil implements ILog{
    public static Map<String, List<WebSocketSession>> webSocketSessionMap = new HashMap<String, List<WebSocketSession>>();

    public static SimpMessagingTemplate simpMessagingTemplate = null;

    public static void doSendMessage(String webSocketType) throws IOException {
        if(WebSocketUtil.webSocketSessionMap.get(webSocketType) != null) {
            String msg = "";
            if(WebSocketConstant.WEBSOCKETTYPE_TODOLIST.equals(webSocketType)) {
                msg = "change";
            }
            for(WebSocketSession webSocketSession :WebSocketUtil.webSocketSessionMap.get(webSocketType)) {
                webSocketSession.sendMessage(new TextMessage(msg));
            }
        }
    }

    public static String getWebSocketType(String url) {
        int length = url.indexOf("/cmcp/");
        String theUrl = url.substring(length+5);
        if(theUrl.startsWith(WebSocketConstant.COMPATIBLEMAPPING)) {
            String [] arr = theUrl.split("/");
            theUrl = "/"+arr[2];
        }
        if(!WebSocketConstant.WEBSOCKETTYPE.containsKey(theUrl)) {
            logger.error("please config the websocketConstant !!!!");
            throw new RuntimeException();
        }   

        String theType = WebSocketConstant.WEBSOCKETTYPE.get(theUrl);
        return theType;
    }


    public synchronized static void initSimpMessagingTemplate() {
        if(simpMessagingTemplate == null) {
            simpMessagingTemplate = SpringUtil.getBeanByName("brokerMessagingTemplate");
        }
    }

    public static void sendMessage(String topic, String message) {
        if(simpMessagingTemplate == null) {
            initSimpMessagingTemplate();
        }
        simpMessagingTemplate.convertAndSend("/topic"+topic, message);
    }

    public static void sendMessage(String topic) {
        sendMessage(topic,"change");
    }
}

请给我帮助!谢谢

不清楚什么是
Broker
以及下面的所有内容。我不认为这是Spring WebSocket的问题,因为我确信即使使用
telnet
,也无法ping
localhost:6161613
-它只是没有启动。谢谢!我要试一试。
@MappedSuperclass
public class WebSocketEntity extends CommonEntity {

    /**
     * serialVersionUID
     */
    private static final long serialVersionUID = 1L;

    @PostPersist
    public void postPersist() throws IOException{
        if(this instanceof TodoEntity) {

            WebSocketUtil.sendMessage(WebSocketConstant.WEBSOCKETTYPE_TODOLIST_MAPPING);
        }

    }

    @PostRemove
    public void postRemove() throws IOException{
        if(this instanceof TodoEntity) {
            WebSocketUtil.sendMessage(WebSocketConstant.WEBSOCKETTYPE_TODOLIST_MAPPING);
        }
    }
}