在
RabbitMQ
音讯队列应用@RabbitListener
接管音讯,队列名称应用常量命名,然而如果应用动静队列名称,比方依据零碎ip
命名队列名称。
获取服务器 IP
/**
* 获取服务器 ip, 解决 linux 获取 ip 为 127.0.0.1bug
* @return
*/
public static String getServerIp() throws SocketException {
String ip = "";
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {NetworkInterface anInterface = en.nextElement();
String name = anInterface.getName();
if (!name.contains("docker") && !name.contains("lo")) {for (Enumeration<InetAddress> enumIpAddr = anInterface.getInetAddresses(); enumIpAddr.hasMoreElements();) {
// 取得 IP
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress()) {String ipaddress = inetAddress.getHostAddress().toString();
if (!ipaddress.contains("::") && !ipaddress.contains("0:0:") && !ipaddress.contains("fe80")) {if(!"127.0.0.1".equals(ip)){return ipaddress;}
}
}
}
}
}
return ip;
}
创立队列
private String IP_ADDRESS = getServerIp();
@RabbitListener(queues = IP_ADDRESS)
public void listener(String message) {System.out.println(message);
}
编译报错 Attribute value must be constant
解决方案
-
创立队列
private String IP_ADDRESS = getServerIp(); @Bean public Queue queue() {return new Queue(IP_ADDRESS); }
-
应用
#{}
援用bean
名称@RabbitListener(queues= "#{queue.name}") public void listener(String message) {System.out.println(message); }
#{queue.name}
其中queue
是bean
名称,name
是固定。