当前位置: 首页 > 知识库问答 >
问题:

Apache camel发送一条简单的消息

盖泽宇
2023-03-14

我有一个简单的camel MINA服务器,使用JAVA DSL,我的运行方式与这里记录的示例类似:

  • 独立运行骆驼并让它在JAVA中继续运行
  • MINA 2组件

我正在尝试创建一个托管在mina:tcp://localhost:9991(又名MyApp_B)的示例应用程序,该应用程序向托管在mina:tcp://localhost:9990(又名MyApp_A)的服务器发送一个非常简单的消息。

我想发送一条简单的消息,消息头中包含一个字符串(即“Hellow World!”)还有尸体上的地址。

public class MyApp_B extends Main{

    public static final String MINA_HOST = "mina:tcp://localhost:9991";

    public static void main(String... args) throws Exception {
        MyApp_B main = new MyApp_B();

        main.enableHangupSupport();

        main.addRouteBuilder(
                new RouteBuilder(){
                    @Override
                    public void configure() throws Exception {

                        from("direct:start")
                        .setHeader("order", constant("Hello World!"))
                        .setBody(constant(MINA_HOST))
                        .to("mina:tcp://localhost:9990");
                    }
                }
                );

        System.out.println("Starting Camel MyApp_B. Use ctrl + c to terminate the JVM.\n");
        main.run();
    }
}
public class MainApp_A {

    public static void main(String... args) throws Exception {
        Main main = new Main();
        main.enableHangupSupport();
        main.addRouteBuilder(new RouteBuilder(){

            @Override
            public void configure() throws Exception {
                from("mina:tcp://localhost:9990").bean(MyRecipientListBean.class, 
                        "updateServers").to("direct:debug");

                from("direct:debug").process(new Processor() {
                    public void process(Exchange exchange) throws Exception {
                        System.out.println("Received order: " +
                                exchange.getIn().getBody());
                    }
                });

            }

        });
        main.run(args);
    }

}

MyApp_A使用的Bean:

public class MyRecipientListBean {

    public final static String REMOVE_SERVER = "remove";
    public final static String ADD_SERVER = "add";

    private Set<String> servers = new HashSet<String>();

    public void updateServers(@Body String serverURI, 
            @Header("order") String order){


        System.out.println("===============================================\n");
        System.out.println("Received " + order + "request from server " + serverURI + "\n");
        System.out.println("===============================================\n");

        if(order.equals(ADD_SERVER))
            servers.add(serverURI);
        else if(order.equals(REMOVE_SERVER))
            servers.remove(serverURI);
    }
}

我已经完成了这段代码,但是,另一端的服务器似乎没有收到任何东西。因此,我有两个问题:

  1. 我做错什么了吗

共有1个答案

贺福
2023-03-14

MyApp_A不发送任何消息。您需要向直接endpoint发送消息才能开始路由

您还可以直接更改为计时器组件,使其每X秒触发一次,等等。

应要求添加了最新评论:

是的,路线也是直达的。只是要向direct发送消息,需要使用Camel。direct是一个内部Camel组件,用于在其endpoint(路由)之间发送消息。要向其发送消息,可以使用producer模板。参见《骆驼行动手册》第7章第7.7节。

 类似资料:
  • 20.3. 发送一条消息 JmsTemplate包含许多方便的方法来发送消息。有些发送方法可以使用 javax.jms.Destination对象指定目的地,也可以使用字符串在JNDI中查找目的地。没有目的地参数的发送方法使用默认的目的地。这里有个例子使用1.0.2版的JMS实现发送消息到一个队列。 import javax.jms.ConnectionFactory; import javax.

  • 我试图在不和谐的情况下每隔x秒发送一条消息。js机器人。我知道如何做到这一点,但我遇到的问题是,即使我启用了slowmode,它也会发送垃圾邮件。我怎样才能解决这个问题?

  • 如何在一条消息中发送多个嵌入?像这样发送多个: 输出: 我找不到任何关于发送多个嵌入的文档,在discord.js文件中提到了它,发送了一个嵌入列表。虽然我试过这个,但它也不起作用。

  • 我正在参与一个项目,该项目将首先构建一个简单的消息系统,该系统将接收消息,存储消息并将其路由到适当的部门。基本用例是: < li >用户在网站表单中写下一条消息或一个问题,并选择一个部门将消息发送给该部门 < li >根据用户的选择,消息被发送到相应部门的消息队列,状态为“未读”、“已读”等。(我们还没有确定所有的状态)。 < li >这些信息成为用户与网站互动的一部分,即,如果用户拨打客服电话,

  • 嗨,我正在使用twilio API发送一个消息到whatsapp号码,我需要的是从表单中获得号码和消息,并将数据放在twilio API中,我现在不知道如何构建逻辑,但我做到了这一点,但没有工作,我得到了这个错误 这就是我写的逻辑init的控制器文件 我希望我准确地解释了我需要什么

  • 我正在尝试用redis streams实现一个java应用程序,其中每个consomer只使用一条消息。就像管道/队列一样,每个使用者只接收一条消息,对其进行处理,完成后,使用者接收流中尚未处理的下一条消息。有效的方法是,每条消息只被一个消费者(使用xreadgroup)使用。 我从redislabs开始学习本教程 守则: 我当前的问题是,一个消费者从队列中获取多条消息,在某些情况下,其他消费者正