java 消息转发_使用Spring-Integration实现http消息转发

packagecom.integration.http;importcom.alibaba.fastjson.JSONObject;importorg.apache.commons.logging.Log;importorg.apache.commons.logging.LogFactory;importorg.springframework.context.ConfigurableApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;importorg.springframework.messaging.Message;importorg.springframework.messaging.MessageHandler;importorg.springframework.messaging.MessagingException;importorg.springframework.messaging.support.GenericMessage;importjava.io.UnsupportedEncodingException;importjava.text.SimpleDateFormat;importjava.util.Date;public class ServiceActivator implementsMessageHandler {private final static Log logger = LogFactory.getLog(ServiceActivator.class);private final static SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");privateJSONObject formatNotificationMsg(JSONObject payload) {

String subject= payload.getString("subject");

String content= payload.getString("message");long sendTime = Long.parseLong(payload.getString("timestamp"));

JSONObject params= newJSONObject();

params.put("msgtype", "markdown");

JSONObject message= newJSONObject();

message.put("title", subject);

message.put("text", "# 通知-" + subject + " \n**" + content + "** \n*" + SDF.format(new Date(sendTime)) + "*");

params.put("markdown", message);returnparams;

}privateJSONObject formatSubscriptionConfirmationMsg(JSONObject payload) {

String type= payload.getString("type");

String subject;

String content;if ("SubscriptionConfirmation".equals(type)) {

subject= "确认订阅";

content= "确认订阅请点击此处";

}else{

subject= "取消订阅成功";

content= "再次订阅请点击此处";

}

String subscribeUrl= payload.getString("subscribe_url");long sendTime = Long.parseLong(payload.getString("timestamp"));

JSONObject params= newJSONObject();

params.put("msgtype", "markdown");

JSONObject message= newJSONObject();

message.put("title", subject);

message.put("text", "# 通知-" + subject + "\n**[" + content + "](" + subscribeUrl + ")**\n*" + SDF.format(new Date(sendTime)) + "*");

params.put("markdown", message);returnparams;

}

@Overridepublic void handleMessage(Message> message) throwsMessagingException {try{

JSONObject payload= JSONObject.parseObject(new String((byte[]) message.getPayload(), "UTF-8"), JSONObject.class);

logger.info("接收参数:" +payload.toJSONString());

String type= payload.getString("type");if ("Notification".equals(type)) {

payload=formatNotificationMsg(payload);

logger.info("发送参数:" +payload.toJSONString());

Message> toSend = new GenericMessage<>(payload.toJSONString(), message.getHeaders());

activator(toSend);

}else if ("SubscriptionConfirmation".equals(type) || "UnsubscribeConfirmation".equals(type)) {

payload=formatSubscriptionConfirmationMsg(payload);

logger.info("发送参数:" +payload.toJSONString());

Message> toSend = new GenericMessage<>(payload.toJSONString(), message.getHeaders());

activator(toSend);

}else{

logger.info("不支持的消息类型:" +type);

}

}catch(UnsupportedEncodingException e) {

e.printStackTrace();

}

}private void activator(Message>message) {

ConfigurableApplicationContext context= new ClassPathXmlApplicationContext("http-outbound-config.xml");

RequestGateway requestGateway= context.getBean("requestGateway", RequestGateway.class);

String reply=requestGateway.echo(message);

logger.info("发送回执:" +reply);

context.close();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Integration提供了一种方便的方式来使用MQTT协议与MQTT代理进行通信。以下是使用spring-integration-mqtt接收客户端消息的基本步骤: 1. 添加spring-integration-mqtt依赖项到您的项目中。 2. 在您的Spring配置文件中创建一个MqttPahoMessageDrivenChannelAdapter bean,用于接收消息。配置包括MQTT代理的连接信息和要订阅的主题。 ```xml <int-mqtt:message-driven-channel-adapter id="mqttInbound" client-id="clientId1" url="tcp://localhost:1883" topics="myTopic1,myTopic2" channel="mqttInputChannel"/> ``` 3. 创建一个消息通道来接收从MQTT代理发送的消息。 ```xml <int:channel id="mqttInputChannel"/> ``` 4. 创建一个消息处理器bean,用于处理接收到的消息。 ```xml <bean id="mqttHandler" class="com.example.MyMqttMessageHandler"/> ``` 5. 将消息通道与消息处理器关联起来。 ```xml <int:service-activator input-channel="mqttInputChannel" ref="mqttHandler" method="handleMessage"/> ``` 6. 创建一个消息处理器类,实现MessageHandler接口,并实现handleMessage方法。在该方法中,您可以处理接收到的消息并执行任何必要的操作。 ```java public class MyMqttMessageHandler implements MessageHandler { @Override public void handleMessage(Message<?> message) throws MessagingException { String topic = message.getHeaders().get("mqtt_topic").toString(); String payload = message.getPayload().toString(); System.out.println("Received MQTT message on topic " + topic + ": " + payload); } } ``` 7. 启动应用程序并开始接收来自MQTT代理的消息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值